我有一个腌制的字符串模型。 (必须腌制,因为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数据库的最佳方法。哪种情况下正确的解决方案并不确定,这取决于该组中的内容,但是无论如何这都是错误的解决方案。
您可能想要该集合的新表,或者至少将其另存为逗号分隔的值或其他内容。