J'ai un modèle qui a un jeu de cordes mariné. (Il doit être décapé, parce que Django n'a pas construit dans le champ de jeu, non?)Django Admin interface avec décapage
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)
Je voudrais l'ensemble être modifiable dans l'interface d'administration. Évidemment, l'utilisateur ne travaillera pas directement avec la chaîne décapée. En outre, l'interface aurait besoin d'un widget pour ajouter/supprimer des chaînes d'un ensemble.
Quelle est la meilleure façon de procéder? Je ne connais pas très bien le système d'administration de Django. Ai-je besoin de créer un widget d'administration personnalisé ou quelque chose?
Mise à jour: Si je besoin d'un widget personnalisé, cela semble utile: http://www.fictitiousnonsense.com/archives/22
Mise à jour 2: Maintenant, je suis à la recherche à travers différents modèles relationnels pour voir si cela fonctionnera. Une idée que je suis jouer avec:
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)
Les inconvénients de ce comprennent:
- Il se sent excessive de faire un modèle entier pour un champ de données (
name
). - Je voudrais l'interface d'administration pour
Foo
pour permettre à l'utilisateur d'entrer une liste de chaînes. Je ne suis pas sûr de savoir comment faire avec cette configuration; faire un widget de forme personnalisée semble moins de travail.
Un objet ManyToManyField est similaire à un ensemble. Pourriez-vous faire vos champs 'uniques = True' dans un autre modèle, et inclure un ManyToManyField de ce modèle dans Foo? –
"Il semble excessif de créer un modèle complet pour un champ de données (nom)" --- cela se ressent, mais ce ne sont que des lignes dans une table de base de données. – osa