2017-08-30 115 views
0

我是Django的一名新手。我正在寻找一篇文章或SO线程描述django在数据库中存储多选列表框值的方式,但找不到一个。在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会如何的值存储在数据库

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。在第一种情况下使用的&仅仅是一个例子。

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

+2

多选列表框是位于网站前端的内容,以及Django如何将其存储在数据库中取决于您为其选择的模型字段。如果你在单独的模型中使用'ManyToManyField',你可以得到类似于第二个例子的东西。 – bouteillebleu

+0

@bouteillebleu非常感谢。我将在管理员和管理员的多选列表框中为用户分配类别。请问有没有例子说明如何使用'ManyToManyField'与'独立模型'。 –

+1

https://stackoverflow.com/questions/45407132/django-many-to-many-relationship-category中的models.py示例有帮助吗?一般来说,https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/也应该对'ManyToManyField'有更多的帮助。 – bouteillebleu

回答

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
  • 您正在跨行复制数据。