【发布时间】:2011-01-16 00:58:06
【问题描述】:
我有一个带有一组腌制字符串的模型。 (它必须被腌制,因为 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的管理界面允许用户输入字符串列表。我不确定如何使用此设置进行操作;制作自定义表单小部件似乎少了一些工作。
【问题讨论】:
-
ManyToManyField 类似于集合。您能否在另一个模型中创建字符串
unique=True字段,并将该模型的 ManyToManyField 包含在 Foo 中? -
“为一个数据字段(名称)制作一个完整的模型感觉太过分了”——确实有这种感觉,但这些只是数据库表中的行。
标签: python django user-interface django-admin