Способ учесть дублирование записей многие-ко-многим в 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 в обоих случаях, он создает только одну запись в базе данных, а не две.
Похоже, что он проверяет дубликаты и удаляет их.
Как сделать так, чтобы я разрешал дубликаты? (Я хочу, чтобы два из ЖЕ значка, связанного с сообщением.)
Спасибо!
1 ответ
Определите модель самостоятельно, чтобы иметь такие неуникальные отношения "многие ко многим"
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()