Как я могу иметь набор запросов в DetailView?

Field 'id' expected a number but got <django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor object at 0x1024f3c70>.

Это сообщение об ошибке и

class ProductDetail(DetailView):
  model = Product

  def get_context_data(self, **kwargs):
    context = super(ProductDetail, self).get_context_data()
    context['related_products'] = Product.objects.filter(category=Product.category)
    context['categories'] = Category.objects.all()
    context['no_category_post_count'] = Product.objects.filter(category=None).count
    return context

Это мой views.py. Я хочу представить страницу, которая показывает продукт и сопутствующие товары. Мои вопросы: 1. Не разрешается ли мне вводить набор запросов в DetailView? 2. Должен ли я тогда использовать ListView для этого?

Вы обращаетесь к объекту с помощью self.object, поэтому:

class ProductDetail(DetailView):
    model = Product

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['related_products'] = Product.objects.filter(
            category_id=self.object.category_id
        )
        context['categories'] = Category.objects.all()
        context['no_category_post_count'] = Product.objects.filter(
            category=None
        ).count()
        return context

или, возможно, короче:

class ProductDetail(DetailView):
    model = Product

    def get_context_data(self, *args, **kwargs):
        return super().get_context_data(
            *args,
            **kwargs,
            related_products=Product.objects.filter(
                category_id=self.object.category_id
            ),
            categories=Category.objects.all(),
            no_category_post_count=Product.objects.filter(category=None).count()
        )
Вернуться на верх