1

次のような 2 つのモデルがあるとします。

class Article(models.Model):
    article_title = models.CharField(max_length=100)

class EventRecord(models.Model):
    article = models.ForeignKey(Article)

ビューで、特定の EventRecord を選択し、関連する記事のタイトルも表示したいと考えています。以下は機能しません。

def classify(request, pk):
    event = get_object_or_404(EventRecord, pk=pk)
    article_id = event.article
    article = get_object_or_404(Article, pk=article_id)

どうすればこれを機能させることができますか? どんな助けでも本当に感謝しています!

4

2 に答える 2

14

Django はこれを自動的に処理します。例えば:

>>> record = EventRecord.objects.get(...)
>>> isinstance(record.article, Article)
True
>>> record.article.article_title
u'title here'

これは、Django が行う魔法のことの 1 つです (何も魔法ではありませんが...)。この作業のために、Django は通常、追加のデータベース クエリを実行することに注意してください。それらを排除するには、select_relatedメソッドを使用できます。以下は、余分なクエリを排除し、必要なことを行うスニペットです。

def classify(request, pk):
    record = EventRecord.objects.filter(pk=pk).select_related()

    # the above returns queryset hence you have to extract the record manually
    if not len(record):
        raise Http404()
    else:
        record = record[0]

    # now use record as usual and no extra queries will be executed
    title = record.article.article_title
    ...
于 2013-04-03T21:51:56.720 に答える