Поздний ответ на этот : вы также можете переопределить конструктор (__init__
) следующим образом:
class FollowerList(models.Model):
follower = models.ForeignKey(User,related_name="follower")
followed = models.ManyToManyField(User,related_name="followed"
def __init__(*args, followed=[], **kwargs):
super(FollowerList, self).__init__(*args, **kwargs)
self.save()
for user in followed:
self.followed.add(user)
т.е. здесь я явно обработал ключевое слово followed
аргумент в функции __init__
, при этом все остальные args
и kwargs
передаются в конструктор по умолчанию.Вызов save
гарантирует, что объект был зарегистрирован и, таким образом, может использоваться в отношении m2m.
Это позволяет затем создать FollowerList
одной строкой, например,
flst = FollowerList(follower=user, followed=[user,])
В качестве альтернативы, как отметил Йоханнес, сохранение модели в __init__
не ожидается.Предпочтительным подходом было бы создать метод Manager
- подробности см. Здесь: https://docs.djangoproject.com/en/1.9/topics/db/managers/, а затем создать FollowerList
:
fl = FollowerList.objects.create(*args, followed, **kwargs)