python django两个模型之间的一对一关系

时间:2012-09-17 09:05:31

标签: python django django-models

我有两个模型,想要与它们建立关系。

class ModelA(models.Model):
  id   = models.IntegerField(primary_key=True) # DB => PK, AI, NN
  name = models.CharField(max_length=50)
  ...

class ModelB(models.Model):
  modelA = models.OneToOneField("ModelA", primary_key=True)
  description = models.CharField(max_length=255)
  ...

所以我在这两个模型之间有关系。是否可以向ModelA添加一个成员,该成员存储与ModelB的关系而不将此关系保存到数据库?

我称之为动态创建的关系或其他东西。任何提示或建议如何让两个模型相互了解?

我认为,如果一个模型上的关系可以动态完成,那将会受益。否则,我会在存储模型时遇到一些问题,因为如果保存其中一个模型,则不会存储其中一个ID。

我想在两个模型上都有关系,所以我可以轻松地将模型用作django-admin中的内联。

问候

2 个答案:

答案 0 :(得分:0)

默认情况下会创建Django中的反向关系。

要获得ModelA,您将使用:

ModelA.objects.filter(modelb__pk = 1)

您可以在此处找到更多详细信息:

https://docs.djangoproject.com/en/dev/topics/db/queries/

答案 1 :(得分:0)

Django ORM将首先保存ModelA,然后保存ModelB,以保持数据库中的数据完整性。

Django可以尝试在一个事务中保存多个项目,这样,如果你取消它,就不会保存任何内容,这可以在shell或Python代码中实现。到目前为止,通过HTTP,您无法在多个查询中维护事务。

如果您需要将模型A显示为模型B的内联,则需要自定义管理界面,而不是新字段/模型。我不知道如何编写自定义管理窗口小部件。我在自定义编辑器视图中做了类似的事情。模板&的JavaScript。我将未保存的模型存储在request.session