django实现模型

时间:2012-12-05 20:16:24

标签: django model foreign-keys

我必须在django项目中实现两个模型 - >国家和大陆。 可以从使用这两个表填充数据库的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中标记,因为我不了解如何实现它。问题是:"非洲大陆的国家应该可以通过类大陆的属性国家访问"

这意味着可以这样做:

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

我已尝试models.ForeignKey,但它无法正常工作。 它说" Nonetype对象没有任何get方法" 有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

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

因此,通过在与大陆相关的国家内添加外键,继续使用多对一的方法。现在,你有一个从一个国家到一个大陆的一对一。接下来,从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')