我有一个腌制的字符串模型。 (必须腌制,因为Django没有内置的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)


我希望该设置在管理界面中可编辑。显然,用户不会直接使用腌制的字符串。同样,该界面将需要一个小部件,用于从集合中添加/删除字符串。

这样做的最佳方法是什么?我对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的管理界面允许用户输入字符串列表。我不确定如何使用此设置进行操作;制作自定义表单小部件似乎少了一些工作。

最佳答案

嗯Django通常将其数据存储在SQL数据库中。绝对将集合存储为腌制字符串不是使用SQL数据库的最佳方法。哪种情况下正确的解决方案并不确定,这取决于该组中的内容,但是无论如何这都是错误的解决方案。

您可能想要该集合的新表,或者至少将其另存为逗号分隔的值或其他内容。

10-06 15:36