10

次のモデルでは:

class header(models.Model):
    title = models.CharField(max_length = 255)
    created_by = models.CharField(max_length = 255)

    def __unicode__(self):
        return self.id()

class criteria(models.Model):
    details =   models.CharField(max_length = 255)
    headerid = models.ForeignKey(header)

    def __unicode__(self):
        return self.id()

class options(models.Model):
    opt_details =   models.CharField(max_length = 255)
    headerid = models.ForeignKey(header)

    def __unicode__(self):
        return self.id()

テーブルヘッダーのデータベースに行がある場合 Id=1, title=value-mart , createdby=CEO

ヘッダー テーブル id=1 に関連するすべての値を取得するために基準とオプション テーブルを照会する方法

また、クエリの例の良いリンクを提案してください。

4

4 に答える 4

21

Ironfroggy は正しいですが、関連するオブジェクトoptionscriteriaオブジェクトを取得する別のより明白な方法があります。Django は、モデルを指すすべての外部キーに対して「逆リレーション」を自動的に作成します。これは通常、関連するモデルの名前に_set. そう:

mycriteria.options_set.all()
mycriteria.header_set.all()

object に関連するすべてのoptionsおよびオブジェクトが表示されます。headercriteriamycriteria

また、スタイルに関する注意: ironfroggy が指摘したように、外部キー フィールドでは使用しないでください。また、モデル クラスには大文字のスタイルを使用する必要があります。これにより、クラスと特定のインスタンスidの違いを確認できます。Criteriacriteria

リンクに関しては、Django のドキュメントが優れており、これらすべてについて説明しています。

于 2010-03-27T18:15:33.897 に答える
9

まず第一に、id紛らわしいので、名前に使用しないでください。そのフィールドは ID ではなく、オブジェクトそのものです。(フィールドがある場合は、ref自動的にフィールドが作成されますref_id)

options.objects.filter(header=a_header)

任意の値と同じようにクエリを実行します。ここで、ヘッダー インスタンスがフィルタリング対象の値です。

于 2010-03-27T17:34:36.550 に答える
5

次の関係 "backward"を探しているようです。

フィルタリングしたいヘッダーオブジェクトを取得し、次のようなものを使用できます

obj = Header.objects.get(title="value-mart", "createdby=CEO")
obj.criteria_set.all()

詳細については、ドキュメントを参照してください

于 2010-03-27T18:18:19.470 に答える
4

Modelsの Django ドキュメントで見られるようなコーディング スタイルと命名規則を試してみることをお勧めします。このようなもの:

class Header(models.Model):
    ...

class Criteria(models.Model):
    details = model.CharField(max_length=255)
    header = models.ForeignKey(Header)

そして、必要に応じてクエリを実行します。

# find Criteria for a given header
value_mart = Header.objects.get(id=1)

# ... via an instance of Header.
value_mart.criteria_set.all()

# ... or with a filter().
Criteria.objects.filter(header=value_mart)
Criteria.objects.filter(header_id=1)

多対 1 の関係のドキュメントでは、使用例も参照されています。

于 2010-03-27T18:13:11.590 に答える