2016-07-07 5 views
2

Wenn ich hstore.DictionaryField() im Django-Modell verwende und keine Parameter übergebe und mein Modell in Djano admin registriere, kann ich neue Schlüsselwertzeilen in der Admin-Schnittstelle im Handumdrehen erstellen.Wie Django HStore DictionaryField im Schema und schemaless-Modus gleichzeitig verwenden?

Wenn ich das gleiche Feld im Schema-Modus verwenden hstore.DictionaryField(schema=['some schema description']) bekomme ich eine feste Anzahl von Feldern beschrieben in schema Parameter.

Kann ich beide Funktionen gleichzeitig haben, nämlich mehrere feste Felder eines bestimmten Typs in der Schemabeschreibung aufgelistet haben, während ich auch neue Felder hinzufügen kann?

Upd

Eine Möglichkeit, dies zu lösen, könnte zwei DictionaryField ist ein mit Schema und andere zu sein schemaless verwenden, aber es ist kaum eine optimale Lösung.

Antwort

0

Die Antwort ist nein, Sie können nicht beide mit der aktuellen Implementierung der Hstore-Bibliothek haben. Werfen Sie einen Blick auf die Funktion init (dies ist von ihrer Quelle auf Github):

class DictionaryField(HStoreField): 
    description = _("A python dictionary in a postgresql hstore field.") 

    def __init__(self, *args, **kwargs): 
     self.schema = kwargs.pop('schema', None) 
     self.schema_mode = False 
     # if schema parameter is supplied the behaviour is slightly different 
     if self.schema is not None: 
      self._validate_schema(self.schema) 
      self.schema_mode = True 
      # DictionaryField with schema is not editable via admin 
      kwargs['editable'] = False 
      # null defaults to True to facilitate migrations 
      kwargs['null'] = kwargs.get('null', True) 

     super(DictionaryField, self).__init__(*args, **kwargs) 

können Sie sehen, dass, wenn das Schema festgelegt wird, dann wird das bearbeitbare Argument für das Feld auf false gesetzt ist, das, was die Der Django-Administrator prüft, ob Sie den Wert in der Admin-Benutzeroberfläche bearbeiten dürfen.

Leider haben Sie nur ein paar Optionen: überschreiben Sie es selbst, indem Sie Ihre eigene Klasse erstellen, die von dieser erbt, oder öffnen Sie eine Pull-Anfrage oder Problem auf ihrer GitHub-Seite und hoffe, dass jemand dazu kommen wird.

+0

Gut hstore sah schon zu mächtig aus. Danke für die Nachricht. –

Verwandte Themen