这是我的模特
class MyUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
items = models.ManyToManyField(Item, related_name='myuser')
当我写下面的代码
MyUser.items.add(item1)
我想知道它是否已添加或重复
答案 0 :(得分:1)
简而言之,myuser.items
将是set
,这意味着即使我们强行要求它也不会创建任何重复的条目
示例:强>
In [1]: from django.contrib.auth.models import User
In [2]: item = Item.objects.create(field_name="some_value")
In [3]: usr = User.objects.get(id=1)
In [4]: myuser = MyUser.objects.create(user=usr)
In [5]: myuser.items.count()
Out[5]: 0
In [6]: myuser.items.add(item)
In [7]: myuser.save()
In [8]: myuser.items.count()
Out[8]: 1
In [9]: myuser.items.add(item)
In [10]: myuser.save()
In [11]: myuser.items.count()
Out[11]: 1
您可以看到,count
在我们一次又一次添加相同的item
实例时没有增加
答案 1 :(得分:1)
.add()不会创建重复项,如果项目不在user_items
联结表中,则会添加该项目。
但是,您需要首先调用.save()
就像打电话给my_model.attribute = 'value'
您需要致电.save()
以获取要保存的实际值。