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

2023-11-24

我有以下 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,则它只会在数据库中创建一个条目,而不是两个。

所以看起来它会检查重复项并删除它们。

我该如何进行这项工作以便允许重复? (我想要两个与帖子关联的相同图标。)

Thanks!


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

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

然后将它们一一相加

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

或将该模型传递为through的论证ManyToManyField e.g.

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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python/Django 中允许重复的多对多条目的方法 的相关文章