我有两种型号,即cat 眼和产品.在我的主页上,我列出了多个类别,当我点击任何类别时,我想打开一个新页面,其中显示属于该类别的产品. 我正在通过url将ategory_id传递到产品查看页面.但是我希望通过使用ategory_id和类别模型来提取类别.title,这样我就可以在Products页面上显示它. 我附上了我的模型的代码

    class category(models.Model):
title = models.CharField(max_length=30)
image = models.ImageField(null=True, blank=True)
def __str__(self):
    return self.title

class product(models.Model):
name = models.CharField(max_length=50, null=True, blank=True)
slug = models.SlugField(null=True, blank=True)
description = models.TextField(max_length=500,null=True, blank=True )
category = models.ForeignKey(category, on_delete=models.CASCADE)
cost = models.PositiveIntegerField()
image = models.ImageField(null=True, blank=True)

def save(self, *args, **kwargs):  # new
    self.slug = slugify(self.name)
    return super().save(*args, **kwargs)


def __str__(self):
    return self.name

我能做的最好的事情就是将ategory_id附加到上下文中,但无论如何它都不是Helpl in.

class products(ListView):
model = product
template_name = 'products/productList.html'
context_object_name = 'products'

def get_context_data(self, **kwargs):
    context = super(products, self).get_context_data(**kwargs)
    context['category'] = self.kwargs['cat_id']
    return context

URL如下所示:

    path('<int:cat_id>', products.as_view(), name = 'products'),

The output I want should look like this: output_image I referred to some stackoverflow questions but couldn't find anything helpul.

推荐答案

您可以使用类别的值筛选查询集:

class ProductListView(ListView):
    model = product
    template_name = 'products/productList.html'
    context_object_name = 'products'

    def get_queryset(self, *args, **kwargs):
        return (
            super()
            .get_queryset(*args, **kwargs)
            .filter(category_id=self.kwargs['cat_id'])
        )

Note:Django中的模型是用PascalCase编写的,而不是snake_case, 因此,您可能希望将模型从Product重命名为product.


Note:在Django中,基于类的视图(CBV)通常有一个…View后缀,以避免与模型名称冲突. 因此,您可以考虑将视图类重命名为ProductListView,而不是products.


Note:通常情况下,当相关字段发生更改时,您应该更改not个slug.正如在文章Cool URIs don't change [w3.org]中所写的,URI not应该改变,因为它们可以被书签标记.因此,应该仅在创建对象时创建辅助信息,而不是在更改辅助信息所依赖的任何字段时创建辅助信息.

Django相关问答推荐

自定义公钥打破Django管理内联逻辑

Django为不同应用程序发出信号

如何在Django CMS中更新上下文

Django通用列表视图与多查询搜索

如何根据状态计算表中数据的数量?

Django 获取用户创建的对象,这些用户属于用户列表

如果一个应用程序有多个具有相同字段的模型,那么保持 DRY 的最佳实践是什么?

在 Django Admin change_list 视图中更改 list_editable 字段时保存 Django 模型

带有代码完成功能的 python / django 的 Sublime Text 2 和 3 设置

django REST 框架 - 嵌套 ModelSerializer 的有限查询集?

如果上下文中缺少变量,如何使 Django 模板引发错误

直接在模型类上使用 Django 管理器与静态方法

Django 密码以什么格式存储在数据库中?

ManyRelatedManager 不可迭代

通过 django shell 保存图像/文件

在基于类的通用视图 CreateView 中访问 request.user 以便在 Django 中设置 FK 字段

Django 登录到控制台

如何在 django 2.0 admin 中使用 allow_tags?

Django 将多个模型传递给一个模板

如何更改 django 模板中布尔值的打印方式?