使用对象实例时未设置Django foreignkey

2024-05-16 05:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

今天早上我碰到了一个奇怪的虫子,如果有人能向我解释为什么失败了,那就太好了。在

假设我有两个非常简单的模型:

class MoMo(models.Model):
    pass


class Objo(models.Model):
    hef_k = models.ForeignKey(MoMo, null=True, blank=True)

当我尝试创建其中一个时,然后按如下方式添加一个foreignkey:

^{pr2}$

在目标存在的接缝:

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]: 

我错过什么了吗?这对我来说很奇怪,如果有任何帮助,我将不胜感激


Tags: in模型trueobjmodelmodelspassnull
3条回答

您没有保存obj添加相关对象后,只保存了obj.hef_k。在

由于外键是obj上的一个实际字段,因此需要保存该对象以记录您已将其与Momo对象关联的事实。在

obj = models.Objo()
obj.hef_k = models.MoMo()
obj.hef_k.save()
obj.save()

必须先保存第二个对象,然后才能引用它。只要不保存它就没有主键。一般来说,使用<Model>.objects.create()生成新对象是一个好主意。它将自动保存对象

from foreing_save import models

obj = models.Objo()
obj.save()
obj.hef_k = models.MoMo.objects.create()
obj.hef_k.save()

您需要创建第二个对象,因为它不存在于数据库中(没有创建关系所需的PK)。您只需创建obj2,然后将它们分配给obj.href_k

obj2 = models.MoMo()
obj2.save()

obj = models.Objo()
obj.save()
obj.hef_k = obj2
obj.hef_k.save()

相关问题 更多 >