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