考虑两个模型(忽略明显的逻辑问题):
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
的过程中将保存该o.pet
。
备注:
如果您打算建议覆盖Owner.save
:当OneToOneField
handled?
Pet
to Owner
的情况是不可取的,因为这将导致一个不太合理的数据库模式。发布于 2012-04-06 05:10:14
如果我正确理解了这个问题,您可以在不覆盖Owner.save()
的情况下使用django.db.models.signals.post_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
的布尔值。
https://stackoverflow.com/questions/10035167
复制相似问题