2012-09-17 57 views
0

我有两个模型,并且想要为它们设置一个关系。python django两个模型之间的一对一关系

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中使用模型作为内联。

问候

回答

0

在Django的反向关系是默认创建的。

要获得MODELA您将使用:

ModelA.objects.filter(modelb__pk = 1) 

你会发现更多的细节在这里:

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

+0

感谢您的回复。我无法理解这可以帮助我将ModelA作为django-admin中的ModelB的内联。我知道不存在反向内联,我想通过在ModelA中建立一个关系成员来解决问题 – Martin

0

Django的ORM会先保存MODELA,然后ModelB,为了保持数据数据库中的完整性。

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

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

相关问题