来自两个不同模型的相同模型中的两个外键

问题描述:

我需要将两个外键放在来自两个不同模型的模型类中。我想将第三个模型类与第一个和第二个模型联系起来。来自两个不同模型的相同模型中的两个外键

我已经试过这样的事情:

class A (models.Model) 
    id_A = models.IntergerField (primary_key=True) 
    #... 

    class B (models.Model) 
    id_B = models.IntergerField (primary_key=True) 
    #... 

    class C (models.Model) 
     id_A = models.ForeignKey(A) 
     id_B = models.ForeignKey(B) 

阅读我明白,是不可能有MultipleColumnPrimaryKeys的文档......但我没有从Django中收到任何错误与此models.py

可能吗?有更聪明的方法吗?

谢谢!

你做得很好,如果你将id_A和id_B关联到同一个模型,django会给你一个错误,在这种情况下只需在第二个字段中放入related_name属性。

+0

好吧,我正要找到关于related_name属性的答案,但你已经回答了我!谢谢! – Hari

Django没有弹出错误信息,因为您做得对。在一个模型中有多个外键是完全合理的,就像类C一样。

在C类中,只要id_A和id_B是他们自己模型的单列主键,它就完美了。

你提到的“MultipleColumnPrimaryKeys”是不同的东西。这意味着对于数据库中的特定表,多个列一起成为表的主键,这在Django中不受支持。

+0

非常感谢你!我是新手,我正在尝试一切!再见! – Hari

您可以使用许多一对多的关系,即自动创建为你中间模型:对many to many

publication.articles.all() # Gives you the articles of the current publication instance 
article.publications.all() # Gives you the publications of the current article instance 

退房文档:

from django.db import models 


class Publication(models.Model): 
    title = models.CharField(max_length=30) 


class Article(models.Model): 
    headline = models.CharField(max_length=100) 
    publications = models.ManyToManyField(Publication, related_name='articles') 

有了这个,你都可以做

如果您需要使用该中间模型中的任何其他字段,您可以告诉django这是through型号,如下所示:

from django.db import models 


class Person(models.Model): 
    name = models.CharField(max_length=128) 


class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 


class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    group = models.ForeignKey(Group) 
    date_joined = models.DateField() 
    invite_reason = models.CharField(max_length=64) 

退房文档的extra fields on many to many

此外,如果你要一个标准的整数自动增量的主键,Django的已经产生了一个给你,这样你就不需要定义id_Aid_B

+0

谢谢你的回答。实际上,id_A和id_B不是自动递增的主键,而是UUIDField:现在我意识到我没有正确写入。 – Hari