Object is not callable error in Django `DetailView`

Я получаю object is not callable error, но не знаю почему. Моя модель выглядит следующим образом...

class PetDetailView(LoginRequiredMixin, generic.DetailView):
    model = Pet

    @property
    def get_queryset(self):
        pet_owner = PetOwner.objects.get(user=self.request.user)
        pet = pet_owner.pet_set.get(pk=self.kwargs["pk"])
        queryset = pet
        return queryset

Я сделал что-то очень похожее, чтобы вернуть список домашних животных для текущего пользователя в другом классе с ListView и при возврате pets все работает нормально.

Хотя это DetailView и я возвращаю только одну вещь. Я хочу вернуть только питомца пользователя, который в данный момент вошел в систему, а не любого питомца, основанного на первичном ключе. Поэтому я переопределяю метод get_queryset, чтобы убедиться, что у меня нет доступа к другим элементам, не относящимся к текущему вошедшему пользователю.

Я напечатал в консоли, что такое pet и получил Leo вместо <Pet:Leo>. Я думаю, что это может быть проблемой, но если это так, то я не уверен, почему это происходит, когда в моем python shell все работает так, как я ожидаю.

В соответствии с Django docs,

get_queryset() : Возвращает кверисет, который будет использоваться для получения объекта, который будет отображаться в данном представлении. По умолчанию get_queryset() возвращает значение атрибута queryset, если он установлен, иначе он конструирует QuerySet путем вызова метода all() на менеджере по умолчанию атрибута model.

Вы используете pet_owner.pet_set.get(pk=self.kwargs["pk"]), разница между get и filter в том, что filter возвращает объект queryset, тогда как get возвращает требуемый объект. Вам нужно использовать filter вместо get, чтобы это сработало.

pet_owner.pet_set.filter(pk=self.kwargs["pk"]) это должно работать, если нет других проблем.

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