get_queryset中的Django 2.0 url参数 [英] Django 2.0 url parameters in get_queryset

查看:71
本文介绍了get_queryset中的Django 2.0 url参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据网址中的类别ID过滤子类别



对于恒定值,它可以正常工作

  return Subcategory.objects.filter(category = 1)

views.py

  class SubcategoriesListView(ListView):
模型=子类别
template_name ='app / categories / index.html'
def get_queryset(self):
返回Subcategory.objects.filter(category = category_id)

urls.py

  path('categories /< int: category_id> /',app.views.SubcategoriesListView.as_view(),name ='subcategories'),

models.py

  class子类别(models.Model):
title = models.CharField(max_length = 30)
category = models.ForeignKey(Category,on_delete = models.CASCADE)

Traceback p>

/ catego处的NameError ries / 1 /
名称'category_id'未定义



get_queryset中的views.py
返回Subcategory.objects.filter(category = category_id)

解决方案

您可以使用 self.args在基于类的视图中获取URI位置和命名参数。 (元组)和 self.kwargs (字典)。



此处您将 category_id 定义为命名参数,因此可以使用 self.kwargs ['category_id'] :

  class SubcategoriesListView(ListView):
model =子类别
template_name ='app / categories / index.html'
def get_queryset(self):
返回Subcategory.objects.filter( category_id = self.kwargs ['category_id']

由于 id 是整数,因此您对 category_id ,不在 category 上。


I would like to filter subcategories based on the category id from the url

For a constant value it works without a problem

return Subcategory.objects.filter(category = 1)

views.py

class SubcategoriesListView(ListView):
    model = Subcategory
    template_name = 'app/categories/index.html'
    def get_queryset(self):
        return Subcategory.objects.filter(category = category_id)

urls.py

path('categories/<int:category_id>/', app.views.SubcategoriesListView.as_view(), name='subcategories'),

models.py

class Subcategory(models.Model):
   title = models.CharField(max_length=30)
   category = models.ForeignKey(Category, on_delete=models.CASCADE)

Traceback

NameError at /categories/1/ name 'category_id' is not defined

views.py in get_queryset return Subcategory.objects.filter(category = category_id)

解决方案

You can obtain the URI positional and named parameters in a class-based view with self.args (a tuple) and self.kwargs (a dictionary) respectively.

Here you defined the category_id as a named parameter, so you can obtain its corresponding value with self.kwargs['category_id']:

class SubcategoriesListView(ListView):
    model = Subcategory
    template_name = 'app/categories/index.html'
    def get_queryset(self):
        return Subcategory.objects.filter(category_id=self.kwargs['category_id'])

Since the id is an integer, you thus filter on category_id, not on category.

这篇关于get_queryset中的Django 2.0 url参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆