Ich habe ein Modell, das eine gebeizte Reihe von Strings hat. (Es hat gebeizt werden, da Django hat nicht im Set-Feld gebaut, nicht wahr?)Django Admin-Schnittstelle mit gebeiztem Set
class Foo(models.Model):
__bar = models.TextField(default=lambda: cPickle.dumps(set()), primary_key=True)
def get_bar(self):
return cPickle.loads(str(self.__bar))
def set_bar(self, values):
self.__bar = cPickle.dumps(values)
bar = property(get_bar, set_bar)
ich das Set im Admin-Interface editierbar sein möchte. Offensichtlich wird der Benutzer nicht direkt mit der gebeizten Saite arbeiten. Außerdem würde die Schnittstelle ein Widget zum Hinzufügen/Entfernen von Zeichenfolgen aus einem Satz benötigen.
Was ist der beste Weg, dies zu tun? Ich bin mit Djangos Admin-System nicht besonders vertraut. Muss ich ein benutzerdefiniertes Admin-Widget oder ähnliches erstellen?
aktualisieren: Wenn ich ein eigenes Widget tun müssen, das sieht hilfreich: http://www.fictitiousnonsense.com/archives/22
Update 2: Jetzt werden verschiedene relationale Modelle zu sehen, ob das funktioniert Ich bin auf der Suche durch. Eine Idee, die ich bin liebäugelt mit:
class FooMember(models.Model):
name = models.CharField(max_length=120)
foo = models.ForeignKey('Foo')
class Foo(models.Model):
def get_names(self):
return FooMember.objects.filter(foo__exact=self)
Nachteile hierfür sind:
- Es fühlt sich übermäßig ein ganzes Modell für ein Datenfeld (
name
) zu machen. - Ich möchte die Admin-Schnittstelle für
Foo
, damit der Benutzer eine Liste von Zeichenfolgen eingeben können. Ich bin nicht sicher, wie man das mit dieser Einrichtung macht; ein benutzerdefiniertes Formular-Widget zu erstellen, scheint weniger Arbeit zu sein.
Ein ManyToManyField ähnelt einem Set. Könnten Sie Ihre Strings "unique = True" -Felder in einem anderen Modell erstellen und ein ManyToManyField dieses Modells in Foo einschließen? –
"Es fühlt sich exzessiv an, ein ganzes Modell für ein Datenfeld (einen Namen) zu erstellen" - es fühlt sich so an, aber das sind nur Zeilen in einer Datenbanktabelle. – osa