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"]) это должно работать, если нет других проблем.