У меня есть модель с маринованным набором ниток.(Его нужно мариновать, потому что у Django нет встроенного поля набора, верно?)
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)
Я бы хотел, чтобы набор был редактируемым в интерфейсе администратора.Очевидно, что пользователь не будет работать с маринованной строкой напрямую.Кроме того, интерфейсу потребуется виджет для добавления / удаления строк из набора.
Каков наилучший способ сделать это?Я не очень знаком с системой администрирования Django.Нужно ли создавать собственный виджет администратора или что-то в этом роде?
Обновление : если мне нужен собственный виджет, это выглядит полезным: http://www.fictitiousnonsense.com/archives/22
Обновление 2 : сейчас я просматриваю различные реляционные модели, чтобы посмотреть, сработает ли это.Одна идея, с которой я играю:
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)
Недостатки этого включают в себя:
- Чрезмерно делать целую модель для одного поля данных (
name
). - Я бы хотел, чтобы интерфейс администратора для
Foo
позволял пользователю вводить список строк.Я не уверен, как это сделать с этой настройкой;создание пользовательского виджета формы кажется менее трудоемким.