1

django プロジェクトで 2 つのモデルを実装する必要があります --> 国と大陸。これら 2 つのテーブルをデータベースに入力する 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 メソッドがありません」と表示されます。

ありがとう

4

1 に答える 1

0

Django は 1 対多を直接サポートしていません。代わりに、1 対 1 の関係の逆を使用して、1 対多の関係を取得できます。

したがって、大陸に関連する国内に外部キーを追加することにより、多対1を使用する別のアプローチを進めてください。これで、国から大陸へ 1 対 1 で対応できます。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 に答える