今天早上我碰到了一个奇怪的小虫,如果有人能向我解释为什么会失败,那就太棒了。
假设我有两个非常简单的模型:
class MoMo(models.Model):
pass
class Objo(models.Model):
hef_k = models.ForeignKey(MoMo, null=True, blank=True)
当我尝试创建其中一个时,然后以这种方式添加一个外键:
from foreing_save import models
obj = models.Objo()
obj.save()
obj.hef_k = models.MoMo()
obj.hef_k.save()
obj.save()
obj.hef_k接缝存在:
obj.hef_k
Out[9]: <MoMo: MoMo object>
但是一旦我从数据库刷新或者只是再次获取它就会消失:
obj.refresh_from_db()
In [12]: obj.hef_k
In [13]:
obj = Objo.objects.get(pk=obj.pk)
obj.hef_k
in [14]:
我错过了什么吗?它对我来说很奇怪,对此的任何帮助都将非常感激
答案 0 :(得分:0)
添加相关对象后,您没有保存obj
,只保存了obj.hef_k
。
由于外键是obj
上的实际字段,您需要保存该对象以记录您已将其与Momo对象关联的事实。
obj = models.Objo()
obj.hef_k = models.MoMo()
obj.hef_k.save()
obj.save()
答案 1 :(得分:0)
您需要创建第二个对象,因为它不存在于您的数据库中(不具有创建关系所需的PK)。您需要的只是创建obj2
,然后再将其分配给obj.href_k
:
obj2 = models.MoMo()
obj2.save()
obj = models.Objo()
obj.save()
obj.hef_k = obj2
obj.hef_k.save()
答案 2 :(得分:0)
您必须先保存第二个对象,然后才能引用它。只要它没有保存,它就没有主键。通常,使用<Model>.objects.create()
生成新对象是个好主意。它会自动保存对象。:
from foreing_save import models
obj = models.Objo()
obj.save()
obj.hef_k = models.MoMo.objects.create()
obj.hef_k.save()