1

私は自分のモデルでこの設定をしています:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Topic(models.Model):
    name = models.CharField(max_length=100)

class Article(models.Model):
    name = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author, null=True, blank=True)
    topics = models.ManyToManyField(Topic, null=True, blank=True)

著者が与えられた場合、彼が書いたトピックを知りたい:

def author_info(request, pk):
    author = get_object_or_404(Author, pk=pk)
    topics = ????

スルー フィールドを指定していた場合はそれを使用できましたが、今では Django がスルー フィールドを作成してくれます。これは透過的であるはずなので、フィールドを参照したくはありません (そのための適切な Django 構造がない限り)。

4

1 に答える 1

1

リレーションシップにまたがるルックアップを使用します。

topics = Topic.objects.filter(article__authors=author).distinct()

注: ここでは、distinct を使用する必要があります。これは、同じトピックが異なる記事で選択される可能性があるためです。

于 2012-04-04T07:31:54.783 に答える