允许在Python / Django中复制多对多条目的方法

我有以下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图标.)

谢谢!

解决方法:

自己定义模型,以获得这种非唯一的多对多关系

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

而不是一个一个地添加它们

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

或通过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()
上一篇:django-ForeignKey,OneToOneField,ManyToManyField


下一篇:mysql – 如何编写迁移以使用ManyToManyField更改模型的主键