Django фильтрация с select_related с помощью Custom QuerySet, работает в оболочке, не работает в представлениях

Я использую Django 3.2

Ниже приведена сокращенная часть моего кода

models.py

class ItemQuerySet(models.QuerySet):
    def qualified(self):
        return self.filter(status=1)

    def training(self):
        return self.filter(status=2)

    def failed(self):
        return self.filter(status=3)

    def showable(self):
        Q1 = Q(status=1)
        Q2 = (Q(last_fields__isnull=False) & 
              ~Q(last_fields__exact=''))

        return self.filter(Q1 | Q2)
       

class Foobar(models.Model):
    # some fields
    objects_qualifiers = ItemQuerySet().as_manager()


class Category(models.Model):
    pass




class Foo(Foobar):
    title = models.CharField(max_length=16)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    content = models.TextField()
    is_done = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

views.py

class FooListView(ListView):
    model = Foo
    template_name = 'foobar/index.html'
    context_object_name = 'foos'
    paginate_by = 5
    ordering=['-created_at']
     
    def get_queryset(self):
        return self.model.objects_qualifiers.showable().filter(is_done=True).all().select_related('author','category')

При обращении к представлению возникает следующая ошибка:

self.RelatedObjectDoesNotExist( foo.models.Foo.author.RelatedObjectDoesNotExist: У Foo нет автора

Это (кажется) имеет смысл, потому что я вызываю select_related на объекте QuerySet - однако, ошибка немного вводит в заблуждение, потому что она определяет и сообщает правильный класс (Foo), но затем говорит, что у него нет поля author.

Имело бы смысл, если бы сообщение об ошибке говорило что-то вроде ItemQuerySet не имеет поля 'author'.

Чтобы проверить правильность моих рассуждений, я решил проверить свою гипотезу в оболочке:

вывод консоли

from foo.models import Foo
foo = Foo.objects.get(id=1)
foo.author
<Userprofile: Joe>

Foo.objects_qualified.showable().filter(is_done=False).select_related('author', 'category')
<ItemQuerySet [<Foo: Hello World!>]>

Это было неожиданно. Почему я могу получить доступ к select_related в консоли, но не в модуле views?

Что вызывает эту проблему, и как ее устранить?

Вернуться на верх