gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:01:53 25 4
gpt4 key购买 nike

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

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

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

创建新所有者时,是否可以自动保存其.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:应如何处理 commit=False 时的情况?
  • OneToOneFieldPet 移动到 Owner 是不可取的,因为这会导致数据库架构不太明智。

最佳答案

如果我正确理解了这个问题,您可以使用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 的 bool 值。

关于python - Django:从*相关*模型自动保存OneToOneField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com