Django:从*相关*模型自动保存OneToOneField?

时间:2012-04-05 20:00:40

标签: python django django-models

考虑两个模型(忽略明显的逻辑问题):

class Owner(m.Model):
    id = m.IntegerField(primary_key=True)

class Pet(m.Model):
    owner = m.OneToOneField(Owner, related_name="pet", primary_key=True)

创建新Owner时,是否可以自动保存.pet

目前,情况正是如此:

>>> o = Owner()
>>> o.pet = Pet()
>>> o.save()
>>> o.id
42
>>> o.pet.id
None
>>> o.pet.owner_id
None
>>> o.pet.owner == o
True

但我希望(并期望?)o.pet会在保存o的过程中保存。{/ p>

注意:

  • 如果您要建议覆盖Owner.save:处理commit=False时的情况应该如何处理?
  • OneToOneFieldPet移至Owner是不可取的,因为这会导致数据架构不太合理。

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,您可以使用django.db.models.signals.post_save来实现所需的结果而不会覆盖Owner.save()

from django.db.models.signals import post_save

post_save.connect(save_pet_handler, sender=Owner, dispatch_uid="my_unique_identifier")

def save_pet_handler(sender, instance, created, **kwargs):
    ...

调用o.save()后,系统会触发一个信号来调用save_pet_handler,然后您可以保存或更新o.pet,这取决于created的布尔值