两个不同型号的同一型号的两个外键

时间:2016-07-06 20:30:33

标签: python django django-models

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

我尝试过这样的事情:

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

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

谢谢!

3 个答案:

答案 0 :(得分:1)

你做得很好,如果你将id_A和id_B与同一个模型联系起来,django会给你一个错误,在这种情况下只需将$scope.$apply()属性放在第二个字段中。

答案 1 :(得分:1)

您可以使用自动为您创建该中间模型的多对多关系:

.button:default {
    -fx-base: #ececec;
}

有了这个,你可以做到这两点:

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')

查看many to many

的文档

如果您需要使用该中间模型中的任何其他字段,您可以告诉django这样的publication.articles.all() # Gives you the articles of the current publication instance article.publications.all() # Gives you the publications of the current article instance 模型:

through

查看extra fields on many to many

的文档

此外,如果您要使用标准整数自动增量主键,django已经为您生成了一个,因此您不需要定义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) id_A

答案 2 :(得分:0)

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

在C类中,只要id_A和id_B是他们自己模型的单列主键,就可以完美地解决问题。

" MultipleColumnPrimaryKeys"你提到的是另一回事。这意味着对于数据库中的特定表,有多个列一起成为表的主键,Django不支持。