【Django】.filter()でSlugFieldを指定した場合のエラー

3/8/20213/9/2021
【Django】.filter()でSlugFieldを指定した場合のエラー

この記事は前ブログに投稿(2020/6/15)したものです。

エラー Related Field got invalid lookup: が出た


原因

.filterでは複数のオブジェクトを取ってくることを想定している為、pkやslugは入らないらしい。

発生状況

テーブル

Authors:著者 複数のbooksを持つ。 Books:本 一つの著者を持つ。

models.py

class Authors(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(unique=True, max_length=255)

class Books(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey(Authors, on_delete=models.PROTECT)

views.py

slug = 'dazai'
books = Books.objects.filter(author__slug=slug)


解決法

SlugFieldからCharFieldに変更する。