1

我必须在 django 项目中实现两个模型 --> Country 和 Continent。可以从使用这两个表填充数据库的 XML 文件中导入有关国家和大洲的所有信息。

我已经以这种方式实现了它们

from django.db import models

    class Continent(models.Model):
        name = models.CharField(max_length=255, unique=True)
        code = models.CharField(max_length=255, unique=True)
        countries = ?

        class Meta:
            ordering = ['name']

    class Country(models.Model):
        name = models.CharField(max_length=255)
        capital = models.CharField(max_length=255)
        code = models.CharField(max_length=255, unique=True)
        population = models.IntegerField(default=0)
        area = models.IntegerField(default=0)
        continent = models.ForeignKey(Continent)

        class Meta:
            ordering = ['name']

你可以看到一个?在 Continent.countries 中标记,因为我不明白如何实现它。问题是:“一个大陆的国家应该可以通过 Continent 类的属性国家访问”

这意味着可以这样做:

from MyApplication.model import Country, Continent
europe = Continent.object.get(code=u'eu')
finland = europe.countries.get(code=u'fi')

我试过models.ForeignKey了,但它不起作用。它说“Nonetype 对象没有任何 get 方法”有人可以帮我吗?

谢谢

4

1 回答 1

0

Django 不直接支持一对多,相反,您可以使用一对一关系的反向来获得一对多关系。

因此,通过在与大陆相关的国家/地区添加外键来继续使用多对一的另一种方法。现在,您可以一对一地从国家到大陆。接下来,从 's 对象进行反向查询Continent以获得所需的关系。看一看:

class Continent(models.Model):
    ...

class Country(models.Model):
    ...
    continent = models.ForeignKey(Continent, related_name="countries")
    ...

europe = Continent.object.get(code=u'eu')
finland = europe.countries.get(code=u'fi')
于 2012-12-05T20:20:45.600 回答