Wie kann ein Schlüsselname für das App Engine NDB-Modell am besten angegeben werden?

8

Ich versuche ein ndb-Modell zu erstellen, in dem jeder Datensatz ein eindeutiges Feld "name" hat. Ich möchte dieses Feld als key_name-Feld definieren und es zum Nachschlagen der Datensätze verwenden. Muss ich ein Namensfeld angeben oder kann ich das Feld key_name irgendwie auf eine beliebige Zeichenfolge setzen, die der Benutzer angeben kann, solange sie eindeutig ist?

Ich denke Model.get_or_insert zu verwenden, um sicherzustellen, dass alte Datensätze nicht überschrieben werden, aber gibt es eine Möglichkeit zu sagen, ob der Rückgabewert neu erstellt oder bereits vorhanden ist? Ich möchte in der Lage sein, eine Fehlermeldung anzuzeigen, wenn der Benutzer einen doppelten Namen eingegeben hat.

Schließlich habe ich versucht, ein key_name-Feld in einem DjangoForms-Modell zu erstellen, das das oben genannte ndb-Modell als Metaklasse verwendet, sodass ich Djangoformen für die Validierung / Darstellung verwenden kann, aber aus irgendeinem Grund werden meine definierten Felder nicht angezeigt.

>

class UserProfileForm (djangoforms.ModelForm):     Schlüsselname = djangoforms.StringProperty ()     Klasse Meta:         model = UserProfile

    
jz87 18.04.2012, 18:31
quelle

1 Antwort

14
  

Muss ich ein Namensfeld angeben oder kann ich das Feld key_name irgendwie auf eine beliebige Zeichenfolge setzen, die der Benutzer angeben kann, solange sie eindeutig ist?

Sie können Ihren eindeutigen Schlüsselnamen als id -Parameter an den Modellkonstruktor übergeben: profile = UserProfile(id='my_unique_name') .

  

Ich denke Model.get_or_insert zu verwenden, um sicherzustellen, dass alte Datensätze nicht überschrieben werden, aber gibt es eine Möglichkeit zu sagen, ob der Rückgabewert neu erstellt oder bereits vorhanden ist? Ich möchte in der Lage sein, eine Fehlermeldung anzuzeigen, wenn der Benutzer einen doppelten Namen eingegeben hat.

Verwenden Sie Model.get_by_id() . Wenn ein Modell nicht gefunden wird, gibt es eine Modellinstanz oder None zurück:

%Vor%
  

Schließlich habe ich versucht, ein key_name-Feld in einem DjangoForms-Modell zu erstellen, das das oben genannte ndb-Modell als Metaklasse verwendet, sodass ich Djangoformen für die Validierung / Darstellung verwenden kann, aber aus irgendeinem Grund werden meine definierten Felder nicht angezeigt.

>

Ich weiß nicht, wie DjangoForms funktionieren, aber höchstwahrscheinlich sind sie nicht mit NDB kompatibel. Sie sollten Ihre eigene Validierungslogik erstellen.

    
Maxim 18.04.2012, 19:16
quelle