manytomany中添加功能的结果是什么?

时间:2018-04-04 01:15:28

标签: django many-to-many

这是我的模特

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)

我想知道它是否已添加或重复

2 个答案:

答案 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()以获取要保存的实际值。