Skip to main content
 首页 » 编程设计

python之带有 pickled 集的 Django 管理界面

2024年09月03日34del

我有一个模型,它有一组腌制的字符串。 (它必须被腌制,因为 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 的管理界面允许用户输入字符串列表。我不确定如何使用此设置来做到这一点;制作自定义表单小部件似乎工作量更少。

请您参考如下方法:

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

您可能需要为该集合创建一个新表格,或者至少将其保存为逗号分隔值或其他内容。