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