使用对象实例

时间:2017-09-25 09:10:26

标签: python django database

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

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

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

我错过了什么吗?它对我来说很奇怪,对此的任何帮助都将非常感激

3 个答案:

答案 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()