django中某些过滤器的动态连接

django中某些过滤器的动态连接,django,filter,models,Django,Filter,Models,我想从用户那里得到三个字段 两个字段是数据库字段 一个是用于连接这些字段模式的无线电波盒,即和/或 。问题是我不知道如何根据连接字段连接这两个过滤器 我想使用一行代码来告诉field1joinfiled2,其中join是用户指定的连接模式的变量。查询数据库时可以检查第三个字段。 过滤器的形式可以如下所示: forms.py 在ListView中,您可以执行以下操作: views.py 注意,您必须在表单上使用GET,对于过滤器html,您可以在查询数据库时检查第三个字段。 过滤器的形式可以如

我想从用户那里得到三个字段

  • 两个字段是数据库字段

  • 一个是用于连接这些字段模式的无线电波盒,即和/或

。问题是我不知道如何根据连接字段连接这两个过滤器


我想使用一行代码来告诉field1joinfiled2,其中join是用户指定的连接模式的变量。

查询数据库时可以检查第三个字段。 过滤器的形式可以如下所示:

forms.py 在ListView中,您可以执行以下操作:

views.py
注意,您必须在表单上使用GET,对于过滤器html,您可以在查询数据库时检查第三个字段。 过滤器的形式可以如下所示:

forms.py 在ListView中,您可以执行以下操作:

views.py
请注意,您必须在表单上使用GET,对于过滤器html

谢谢,我从用户那里获得两个字段+运算符,使用if,我可以轻松地将它们组合起来。但是我想要一条更直的路。所以我在两个python变量中得到了两个字段。这些查询集可以使用&/|组合而没有任何问题,但问题是我不能在它们之间使用一个变量来放置没有条件if的指定联接。谢谢,我从用户那里获得了两个字段+运算符,并且使用if,我可以轻松地组合它们。但是我想要一条更直的路。所以我在两个python变量中得到了两个字段。这些查询集可以使用&/|进行组合,没有任何问题,但问题是我不能在它们之间使用一个变量来放置没有条件if的指定联接。
CHOICES = (
    ('and', 'And'),
    ('or', 'Or'),
)

class FilterForm(forms.ModelForm):
    field_one = forms.CharField()
    field_two = forms.CharField()
    query_type = forms.ChoiceField(choices=CHOICES)

    class Meta:
        model = YourModel
        fields = [
            'field_one',
            'field_two',
            'query_type',
        ]
from django.db.models import Q

class YourListView(ListView):
    ...

    def get_queryset(self, *args, **kwargs):
        queryset = super(YourListView, self).get_queryset(**kwargs)

        query_type = self.request.GET.get("query_type")
        field_one = self.request.GET.get("field_one")
        field_two = self.request.GET.get("field_two")

        if query_type == 'and':
            queryset = queryset.filter(field_one=field_one, field_two=field_two)
            
        elif query_type == 'or':
            queryset = queryset.filter( 
                Q(field_one=field_one)
                | Q(field_two=field_two)
            )
        return queryset