Django - установить многие ко многим через с различными значениями по умолчанию
Предполагая модель данных, как в документации Django:
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
В docs группа beatles установлена следующим образом:
beatles.members.set([john, paul, ringo, george], through_defaults={'date_joined': date(1960, 8, 1)})
В моем случае я получил кортеж с различными сквозными значениями:
(
{
"person": "john", "date_joined": datetime(2002,1,1),
"person": "ringo", "date_joined": datetime(...),
...
}
)
Как установить это множество-ко-многим с различными значениями по умолчанию?
Я могу сделать что-то вроде
group.members.clear()
for m in member_to_set:
Membership.objects.create(person = m.person, date_joined = m.date_joined)
Но это вызовет множество операций с базой данных.
С другой стороны, я бы не хотел заново реализовывать всю логику выяснения, какие членства нужно удалить