Каков результат функции добавления во многих томах?

59
6

это моя модель

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)

я хочу знать, было ли оно добавлено или дублировано

спросил(а) 2018-04-04T04:15:00+03:00 2 года, 8 месяцев назад
1
Решение
59

Короче говоря, 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 снова и снова

ответил(а) 2018-04-04T07:06:00+03:00 2 года, 8 месяцев назад
59

.add() не создает дубликатов, он добавляет элемент, если он отсутствует в user_items соединений user_items.

Однако сначала необходимо вызвать.save()


Так же, как при вызове my_model.attribute = 'value'

вам необходимо вызвать .save() для сохранения фактического значения.

ответил(а) 2018-04-04T13:15:00+03:00 2 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема