允许在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,它只在数据库中创建一个条目,而不是两个。

因此,它似乎检查重复并删除它们。

我如何使它工作,使我允许重复?(我想要两个相同的图标与一个帖子相关联。)

谢谢!

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

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

,然后逐个相加

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

或将该模型作为ManyToManyFieldthrough参数传递,例如

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

相关内容

  • 没有找到相关文章

最新更新