在django中存储多个选择值

时间:2017-08-30 12:28:06

标签: python django

我是Django的新手。我正在搜索一篇文章或SO线程,描述django在数据库中存储多选列表框值但无法找到的方式。

在我的情况下,我有类别列表框,其中包含选项(C1,C2,C3)。类别名称可以很长。我想为单个用户分配多个类别。它也可以是分配给用户的单一类别。

我的模型看起来像这样(cat_name fiels取决于它在数据库中的存储方式)

class Category(models.Model):
    user = models.ForeignKey(User)
    cat_name = models.CharField(max_length=100)
    #or cat_name = models.TextField()

我的问题是django如何将值存储在db

id    user_id    cat_name
1     1          C1&C2&C3
2     2          C1&C2
3     3          C3

或者

id    user_id    cat_name
1     1          C1
2     1          C2
3     1          C3
4     2          C1
5     2          C2
6     3          C3

如果是第一种情况,那么我将使用TextField其他CharField。 &安培;在第一种情况下使用的只是一个例子。

任何建议/链接都非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:0)

Django会将您的数据存储为字符串。

假设您在ModelForm中有一个名为cat_name的MultipleChoiceField,并且该字段的已定义架构为CharField

Django在保存之前将表单值作为列表。 保存时,在调用get_prep_value期间,字段的python值将转换为其对应的db值。

>>> selection = ['cat 1', 'cat 2', 'cat 3']
>>> str(selection)
"['cat 1', 'cat 2', 'cat 3']"

麻烦:

  • 你必须教Django如何转换回to_python
  • 您正在跨行复制数据。