来自两个不同模型的相同模型中的两个外键
我需要将两个外键放在来自两个不同模型的模型类中。我想将第三个模型类与第一个和第二个模型联系起来。来自两个不同模型的相同模型中的两个外键
我已经试过这样的事情:
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
属性。
Django没有弹出错误信息,因为您做得对。在一个模型中有多个外键是完全合理的,就像类C一样。
在C类中,只要id_A和id_B是他们自己模型的单列主键,它就完美了。
你提到的“MultipleColumnPrimaryKeys”是不同的东西。这意味着对于数据库中的特定表,多个列一起成为表的主键,这在Django中不受支持。
非常感谢你!我是新手,我正在尝试一切!再见! – 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_A
和id_B
。
谢谢你的回答。实际上,id_A和id_B不是自动递增的主键,而是UUIDField:现在我意识到我没有正确写入。 – Hari
好吧,我正要找到关于related_name属性的答案,但你已经回答了我!谢谢! – Hari