1

私は何度もグーグルで検索しましたが、それがわからないようです。

djangoで単純な結合クエリを再作成するにはどうすればよいですか?

models.py 内 (Fylker は郡、Dagensrepresentanter は人)

class Fylker(models.Model):
    id = models.CharField(max_length=6, primary_key=True)
    navn = models.CharField(max_length=300)
    def __unicode__(self):
        return self.navn
    class Meta:
        db_table = u'fylker'

class Dagensrepresentanter(models.Model):
    id = models.CharField(max_length=33, primary_key=True)
    etternavn = models.CharField(max_length=300, blank=True)
    fornavn = models.CharField(max_length=300, blank=True)
    fylke = models.ForeignKey(Fylker, db_column='id')
    def __unicode__(self):
        return u'%s %s' % (self.fornavn, self.etternavn)
    class Meta:
        ordering = ['etternavn']  # sette default ordering
        db_table = u'dagensrepresentanter'

モデルは django によって自動作成されるため、ForeignKey を追加して郡に接続しようとしました。id フィールドは、この django プロジェクトに統合しようとしているデータベースから継承されます。

照会することにより

Dagensrepresentanter.objects.all()

私はすべての人々を取得しますが、郡は除きます。照会することにより

Dagensrepresentanter.objects.all().select_related()

Dagensrepresentanter.id と Fylker.id に参加しますが、fylke に参加させたいです。

SELECT * FROM dagensrepresentanter d , fylker f WHERE d.fylke = f.id

このようにして、すべての人と同じ結果セットに郡名 (Fylke navn) を取得します。

追加のリクエスト: 私は django のドキュメントを読み、stackoverflow でかなりの数の質問をしましたが、この ORM のことについて頭を悩ませているようには見えません。痛いのはクエリです。データベースを django ORM の用語で考え始める必要がある SQL のようなものと考えることに慣れている人々のための良いリソース (経験/説明を含むブログ投稿など) はありますか?

4

1 に答える 1

0

レガシー データベースには外部キー制約がない場合があります (たとえば、MyISAM を使用している場合、外部キーはサポートされていません)。

次の 2 つの選択肢があります。

  1. テーブルに外部キー制約を追加します (MyISAM を使用している場合は、Innodb へのアップグレードが必要になります)。次に、./manage inspectdb を再度実行すると、関係が表示されます。
  2. テーブルをそのまま使用し (つまり、明示的な関係を持たずに)、オブジェクト レベルで、または独自の SQL クエリを記述して、クエリを手動で作成します (例: Mytable.objects.get(other_table_id=23))。いずれにせよ、Python の ORM クエリ言語の利点の多くが失われます。
于 2015-09-02T21:21:18.410 に答える