我正在使用 Django Rest Framework Filter 来访问我的数据。我为我的一个模型编写了一个自定义视图集,以处理对某些特定字段的逻辑“或”操作,以请求带有 url 的请求。
这是我的 ViewSet 类(打印仅用于我的调试)
class CustomViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
queryset = appart.MyModel.objects.order_by('pk')
serializer_class = MyModelSerializer
filter_class = MyModelFilter
def get_queryset(self):
# getting param
query = dict(self.request.query_params)
print(query)
ct_query = query['caracteristique_text__icontains'][0].split('|')
cl_query = query['caracteristique__libelle__in'][0].split(',')
# writting request syntax
ct = 'Q(caracteristique__libelle__in=' + str(cl_query) + ')&('
print(ct)
for value in ct_query:
ct += "Q(caracteristique_text__icontains='" + value + "')|"
ct = ct[0:len(ct) - 1]
ct += ')'
print(ct)
filtre_text = "global filtre; filtre = " + ct
# creating the request
exec(filtre_text)
#running the request
self.queryset = self.queryset.filter(filtre)
print(self.queryset)
return self.queryset # doesn't return what I see when running print(self.queryset)
和 MyModelFilter 类:
class MyModelFilter(ModelFilterSet):
class Meta:
model = appart.MyModel
fields = ('id', 'libelle', 'locataire_appart', 'bien_appart',
'adresse', 'loyer_appart', 'caracteristique', 'caracteristique_text',
'date_creation', 'derniere_maj')
这段代码运行良好,可以做我想做的事。他获取 url 参数,动态创建请求语法并返回我正在寻找的数据。
唯一的问题是最后的返回结果与我在代码中打印的结果不同。他仍在尝试根据给定的 url 执行 GET 请求,并且当语法不遵循 django_filter 规则时不返回任何内容。
任何人都可以帮助我防止我的视图集出现这种行为吗?
尚方宝剑之说
catspeake
相关分类