通过fieldname_id保存FK模型字段允许不存在的FK关系

时间:2014-03-21 13:39:31

标签: python django

我有一个由两个ForeignKey字段组成的模型,如下所示。 (这是ManytoMany through字段)

class EntityConceptLink(models.Model):
    entity = models.ForeignKey(Entity)
    standard_concept = models.ForeignKey(StandardConcept)
    other fields...

我正在尝试创建这样的对象:

EntityConceptLink.objects.get_or_create(
    entity_id=entity_id,  # passing in an integer, should be PK of Entity
    standard_concept=concept)  # passing in a model instance

问题是,当我传入对应于不存在的实体的entity_id时,上面的代码仍以某种方式保存了模型实例。只有在我尝试entityconceptlinkinstance.entity时才会DoesNotExist: Entity matching query does not exist被提升。

在尝试保存期间,模型是否应该无法验证?我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

是的,我认为下面的代码应该可以正常工作。

EntityConceptLink.objects.get_or_create(
    entity__id=entity_id,  # Believe `id` would be the primary key
    standard_concept=concept)

在上述情况下,如果实体模型找不到所需的id,则会引发错误。请参阅实体ID中的使用双__而不是单_