考虑两个模型(忽略明显的逻辑问题):
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
时的情况应该如何处理?OneToOneField
从Pet
移至Owner
是不可取的,因为这会导致数据架构不太合理。答案 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
的布尔值