方式,允许在Python/Django的重复多到许多条目

方式,允许在Python/Django的重复多到许多条目

问题描述:

我有以下的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

定义自己的模型,能有这样非唯一许多一对多关系

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()