Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django过滤器-基于url中的slug编辑查询集_Django_Python 3.x_Filter_Django Queryset_Django Filters - Fatal编程技术网

Django过滤器-基于url中的slug编辑查询集

Django过滤器-基于url中的slug编辑查询集,django,python-3.x,filter,django-queryset,django-filters,Django,Python 3.x,Filter,Django Queryset,Django Filters,所以我有一个简单的模型叫Pages。每个页面都属于某个类别,因为这是一个ForeignKey关系,所以一个页面只能属于一个类别 除了类别之外,我们还使用标签来进一步过滤不同的页面 我们使用一个类别视图来显示属于某个类别的所有页面 问题是,我们使用django过滤器通过选择不同的标记来过滤页面。标签列表将随着页数的增加而增加。因此,我只想显示与该类别相关的标记 url.py 过滤器.py 这似乎不起作用,如何从url获取当前的_类别 好吧,我下面所做的确实有效,但看起来有点粗糙。。 在解决这个问题

所以我有一个简单的模型叫Pages。每个页面都属于某个类别,因为这是一个ForeignKey关系,所以一个页面只能属于一个类别

除了类别之外,我们还使用标签来进一步过滤不同的页面

我们使用一个类别视图来显示属于某个类别的所有页面

问题是,我们使用django过滤器通过选择不同的标记来过滤页面。标签列表将随着页数的增加而增加。因此,我只想显示与该类别相关的标记

url.py 过滤器.py 这似乎不起作用,如何从url获取当前的_类别

好吧,我下面所做的确实有效,但看起来有点粗糙。。 在解决这个问题上,有谁有更好的答案吗

def category_filter(request):
    path = request.path
    category_slug = re.sub('\/+', r'', path)
    current_category = category_slug
    return Tag.objects.filter(page__category__slug=current_category).distinct()
致以最良好的祝愿


Kevin

您的原始视图函数应该能够在传入URL的类别slug的位置获取参数
category\u slug
,例如(注意
num
如何在URL中声明为
int
,然后作为参数传递到
页面
):

url.py中

path('blog/page/',views.page),
在您的视图功能中

def页面(请求,num=1):
...
如果您使用的是Django REST,您应该能够获取URL参数your
kwargs
member属性:

url.py中

url(“^purchases/(?P.+)/$”,PurchaseList.as_view()),
在您的视图类中:

类采购列表(generics.ListAPIView):
serializer\u class=PurchaseSerializer
def get_queryset(自我):
"""
此视图应返回所有购买的列表
由URL的用户名部分确定的用户。
"""
username=self.kwargs['username']#这就是你想要的
返回Purchase.objects.filter(购买者\用户名=用户名)

您的原始视图函数应该能够在传入URL的类别slug的位置获取参数
category\u slug
,如(注意
num
如何在URL中声明为
int
,然后作为参数传递到
页面
):

url.py中

path('blog/page/',views.page),
在您的视图功能中

def页面(请求,num=1):
...
如果您使用的是Django REST,您应该能够获取URL参数your
kwargs
member属性:

url.py中

url(“^purchases/(?P.+)/$”,PurchaseList.as_view()),
在您的视图类中:

类采购列表(generics.ListAPIView):
serializer\u class=PurchaseSerializer
def get_queryset(自我):
"""
此视图应返回所有购买的列表
由URL的用户名部分确定的用户。
"""
username=self.kwargs['username']#这就是你想要的
返回Purchase.objects.filter(购买者\用户名=用户名)
class PageByCategoryView(FilterView):
    logger.info("Category view is called")
    model = Page
    filterset_class = PageByCategoryFilter
    strict = False
    queryset = Page.published_objects.all()
    template_name = 'pages/page_by_category.html'
   class PageByCategoryFilter(django_filters.FilterSet):
        tags = django_filters.ModelMultipleChoiceFilter(
            queryset=Tag.objects.filter(page__category_id='2'), <-- actually works!
            conjoined=True,
            widget=forms.CheckboxSelectMultiple()
        )

        class Meta:
            model = Page
            fields = [
                'tags__slug'
            ]
@property
def qs(self):
        queryset = super(PageByCategoryFilter, self).qs
        current_category = self.request.GET.get('category_slug')
        if current_category:
            logger.info("Current category is in url")
            return queryset.filter(category__slug=current_category)
        return queryset
def category_filter(request):
    path = request.path
    category_slug = re.sub('\/+', r'', path)
    current_category = category_slug
    return Tag.objects.filter(page__category__slug=current_category).distinct()