我的模型有一组酸洗的字符串。 (它必须被腌制,因为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
的管理界面允许用户输入字符串列表。我不确定如何使用此设置;制作自定义表单小部件似乎不那么重要了。答案 0 :(得分:3)
嗯。 Django通常将其数据存储在SQL数据库中。将一个集合存储为pickle字符串绝对不是使用SQL数据库的最佳方式。在你的情况下,哪个是正确的解决方案并不是很明显,这取决于该集合中的内容,但在任何情况下这都是错误的解决方案。
您可能需要该表的新表,或者至少将其另存为逗号分隔值或其他内容。