Вы регистрируете отношения так же, как и у вас, позвонив add
на Production
. Проблема в том, что вы сохраняете Gallery
, но не Production
, чей save
вы перезаписали. Вам нужно позвонить super(...).save(...)
в конце вашего save
:
def save(self, force_insert=False, force_update=False):
if not ( Gallery.objects.filter(name__exact="foo").exists() ):
g = Gallery(name="foo")
g.save()
self.gallery.add(g)
super(Production, self).save(force_insert=force_insert, force_update=force_update)
Кроме того, поскольку здесь вы имеете дело с двумя моделями, вы должны использовать для этого сигналы Джанго, вероятно, после сохранения , что также даст вам флаг created
:
def create_default_gallery(sender, instance, created, **kwargs):
if created and not Gallery.objects.filter(name__exact="foo").exists():
g = Gallery(name="foo")
g.save()
instance.gallery.add(g)
models.signals.post_save.connect(create_default_gallery, sender=Production)
Хотя это все равно не будет делать то, что вы говорите, что хотите; если вы действительно хотите связать значение по умолчанию Gallery
с каждым новым Production
, вы захотите сделать это, даже если вы не создаете Gallery
:
по умолчанию
def create_default_gallery(sender, instance, created, **kwargs):
if created:
g = Gallery.objects.get_or_create(name__exact="foo")
g.save()
instance.gallery.add(g)
models.signals.post_save.connect(create_default_gallery, sender=Production)