Django Admin интерфейс с маринованным набором - PullRequest
2 голосов
/ 16 января 2011

У меня есть модель с маринованным набором ниток.(Его нужно мариновать, потому что у 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 позволял пользователю вводить список строк.Я не уверен, как это сделать с этой настройкой;создание пользовательского виджета формы кажется менее трудоемким.

1 Ответ

3 голосов
/ 16 января 2011

Эммы.Джанго обычно хранит свои данные в базе данных SQL.Хранение набора в виде маринованной строки - определенно не лучший способ использовать базу данных SQL.Не сразу очевидно, какое решение является правильным в вашем случае, зависит от того, что находится в этом наборе, но это неправильное решение в любом случае.сохраните это как разделенные запятыми значения или что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...