2017-08-30 77 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
  • 您正在跨行復制數據。