我有两个模型,它们之间有多对一的关系。
from django.db import models
class Continent(models.Model):
name = models.CharField(max_length=255, unique=True)
code = models.CharField(max_length=2, unique=True, primary_key=False)
c = Continent.objects.get(id=1)
countries = c.country_set.all()
class Meta:
ordering = ["name"]
class Country(models.Model):
name = models.CharField(max_length=255, unique=True)
capital = models.CharField(max_length=255)
code = models.CharField(max_length=2, unique=True, primary_key=False)
continent = models.ForeignKey('Continent')
population = models.PositiveIntegerField()
area = PositiveIntegerField()
class Meta:
ordering = ["name"]
我希望通过Continent模型中的国家/地区属性访问非洲大陆的国家/地区。我试图按照文档(下面的链接)中的“向后”关系,但无法使其工作。 https://docs.djangoproject.com/en/1.11/topics/db/queries/#backwards-related-objects
答案 0 :(得分:1)
您需要在related_name
关系中设置ForeignKey
参数。这会自动将具有该名称的字段添加到Continent
模型。
这就是模型的外观(注意Country.continent
外键字段中的'related_name'参数):
class Continent(models.Model):
name = models.CharField(max_length=255, unique=True)
code = models.CharField(max_length=2, unique=True, primary_key=False)
class Meta:
ordering = ["name"]
class Country(models.Model):
name = models.CharField(max_length=255, unique=True)
capital = models.CharField(max_length=255)
code = models.CharField(max_length=2, unique=True, primary_key=False)
continent = models.ForeignKey('Continent', related_name='countries')
population = models.PositiveIntegerField()
area = PositiveIntegerField()
class Meta:
ordering = ["name"]
现在你可以这样做:
def test():
c = Continent.objects.get(id=1)
for country in c.countries.all():
print(c.name)
country_set
是用作相关名称的默认名称。您无需将其设置为Continent
类中的显式字段。它是在幕后创建的。