【问题标题】:Dependent drop down on filter依赖于过滤器的下拉菜单
【发布时间】:2021-07-06 01:36:46
【问题描述】:

之前我在我的模型表单(汽车制造商到制造商模型)based on this blog post 上实现了一个依赖下拉列表。现在我的网站上有一个部分供用户查看带有过滤器的汽车,供制造商建模。唯一的问题是,如果您选择制造商,您将拥有每个型号的列表,而不仅仅是与该制造商相关联的型号。如果你能指出我将如何在过滤器上创建依赖下拉列表的正确方向。

过滤器

class carFilter(django_filters.FilterSet):
class Meta: 
    model = Post
    fields = 'manufacture', 'model'

【问题讨论】:

    标签: django django-filter


    【解决方案1】:

    您可以通过在Meta 中指定过滤器集来为过滤器集提供自定义表单,如documentation 中所述。在此之后将是与您链接的blog post 中描述的过程类似的过程。所以你的表单实现会是这样的:

    from django import forms
    
    
    class CarFilterForm(forms.Form):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            # Assuming model name as "model", if it really is that you might want to change it
            self.fields['model'].queryset = Model.objects.none()
            if 'manufacture' in self.data:
                try:
                    manufacture_id = int(self.data.get('manufacture'))
                    self.fields['model'].queryset = Model.objects.filter(manufacture_id=manufacture_id)
                except (ValueError, TypeError):
                    pass
            # No pre-existing instance since this is a form for filtering, so the other condition is not needed
    
    
    class carFilter(django_filters.FilterSet):
        class Meta: 
            model = Post
            fields = 'manufacture', 'model'
            form = CarFilterForm
    

    在此之后,您将编写 JavaScript 和类似于您在博客文章中描述的那样的视图。


    注意:类名最好在PascalCase而不是camelCase,因此你应该使用carFilter CarFilter。请看PEP 8 -- Style Guide for Python Code

    【讨论】:

    • 非常感谢! JS / jQuery 不是很好,但会试一试!
    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多