2016-07-06 142 views
0

我需要將兩個外鍵放在來自兩個不同模型的模型類中。我想將第三個模型類與第一個和第二個模型聯繫起來。來自兩個不同模型的相同模型中的兩個外鍵

我已經試過這樣的事情:

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

可能嗎?有更聰明的方法嗎?

謝謝!

回答

1

你做得很好,如果你將id_A和id_B關聯到同一個模型,django會給你一個錯誤,在這種情況下只需在第二個字段中放入related_name屬性。

+0

好吧,我正要找到關於related_name屬性的答案,但你已經回答了我!謝謝! – Hari

0

Django沒有彈出錯誤信息,因爲您做得對。在一個模型中有多個外鍵是完全合理的,就像類C一樣。

在C類中,只要id_A和id_B是他們自己模型的單列主鍵,它就完美了。

你提到的「MultipleColumnPrimaryKeys」是不同的東西。這意味着對於數據庫中的特定表,多個列一起成爲表的主鍵,這在Django中不受支持。

+0

非常感謝你!我是新手,我正在嘗試一切!再見! – Hari

1

您可以使用許多一對多的關係,即自動創建爲你中間模型:對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

相關問題