带有pickled set的Django Admin界面

时间:2011-01-16 00:58:07

标签: python django user-interface django-admin

我的模型有一组酸洗的字符串。 (它必须被腌制,因为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 个答案:

答案 0 :(得分:3)

嗯。 Django通常将其数据存储在SQL数据库中。将一个集合存储为pickle字符串绝对不是使用SQL数据库的最佳方式。在你的情况下,哪个是正确的解决方案并不是很明显,这取决于该集合中的内容,但在任何情况下这都是错误的解决方案。

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