首页 > 解决方案 > queryset 在 Django 中传递 null

问题描述

我正在 django 上构建我的第一个 ecom,我在 DetailsView 上有一个带有类别字段的项目模型,我想显示与特定项目相关的项目,因为我尝试了这个。

class ItemDetailView(DetailView):
    model = Item
    template_name = "product.html"
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        related_items = Item.objects.filter(category=Item.category).order_by('category')
        context['related_items'] = related_items
        print(related_items)
        return context

但这不起作用它打印:

<QuerySet []>

有人可以告诉我做错了什么。

标签: django

解决方案


您应该决定要查找的类别。例如:

related_items = Item.objects.filter(category_id=1).order_by('category')

或者

category = Category.objects.first()
related_items = Item.objects.filter(category=category).order_by('category')

所以它必须是类别类型对象或与类别ID相关。显示相关项目的一种常用方法是:

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        related_items = Item.objects.filter(category=self.get_object().category).order_by('category')
        context['related_items'] = related_items
        print(related_items)
        return contex

如果您想从相关项目中排除当前项目,您可以执行以下操作:

def get_context_data(self, **kwargs):
        item = self.get_object()
        context = super().get_context_data(**kwargs)
        related_items = Item.objects.filter(category=item.category).exclude(id=item.id).order_by('category')
        context['related_items'] = related_items
        print(related_items)
        return contex

推荐阅读