2011-08-31 55 views
3

我有以下的Django模型:方式,允許在Python/Django的重複多到許多條目

class Icon(models.Model): 
    name = models.CharField(max_length=200,null=False,blank=False) 

class Post(models.Model): 
    icons = models.ManyToManyField(Icon) 

當我寫了下面的代碼:

post = Post() 
icons = [] 
icon_id = form.cleaned_data['icon_1'] 
if (icon_id): 
    i = Icon.objects.get(id=icon_id) 
    icons.append(i) 

icon_id = form.cleaned_data['icon_2'] 
if (icon_id): 
    i = Icon.objects.get(id=icon_id) 
    icons.append(i) 

post.icons = icons 
post.save() 

它工作正常的大部分是創建一個Post對象和兩個Icon對象。

但是,如果在兩種情況下icon_id都是1,它只會在數據庫中創建一個條目,而不是兩個。

所以它看起來像檢查重複和刪除它們。

如何使這項工作,所以我允許重複? (我想要兩個與某個帖子相關的SAME圖標。)

謝謝!

+0

我不明白。你爲什麼附加兩個具有相同ID的圖標? – milkypostman

回答

7

定義自己的模型,能有這樣非唯一許多一對多關係

class PostIcon(models.Model): 
    post = models.ForeignKey(Post) 
    icon = models.ForeignKey(Icon) 

,比加逐一

for icon in icons: 
    PostIcon(post=post, icon=icon).save() 

或傳輸模式爲through參數ManyToManyField例如

class Post(models.Model): 
    icons = models.ManyToManyField(Icon, through=PostIcon) 

或者您可以與PostIcon代替具有多行相關聯的計數,如果例如提供用例您可能需要顯示徽章10次

class PostIcon(models.Model): 
    post = models.ForeignKey(Post) 
    icon = models.ForeignKey(Icon) 
    count = models.IntegerField()