Каков результат функции добавления во многих томах?
это моя модель
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)
я хочу знать, было ли оно добавлено или дублировано
Короче говоря, 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
снова и снова
.add() не создает дубликатов, он добавляет элемент, если он отсутствует в user_items
соединений user_items
.
Однако сначала необходимо вызвать.save()
Так же, как при вызове my_model.attribute = 'value'
вам необходимо вызвать .save()
для сохранения фактического значения.
Еще в рубрике
- Вопросы
- Many-to-many
- Каков результат функции добавления во многих томах?