2 回答

TA贡献1788条经验 获得超4个赞
好的,所以我终于解决了我的问题,代码中没有错误。这是由于filter_class = MyModelFilter. 我刚刚评论了这条线,一切都开始起作用了。老实说,我不知道为什么,但如果有人知道原因,我将不胜感激。
我还查看了exec@schillingt 正在谈论的内容,这是那些试图做同样事情或遇到同样问题的人的结果。
class CustomViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
queryset = models.MyModel.objects.order_by('pk')
serializer_class = MyModelSerializer
filter_class = MyModelFilter
def get_queryset(self):
query = dict(self.request.query_params)
ct = self.request.query_params.get('caracteristique_text__icontains', None)
cl = self.request.query_params.get('caracteristique__libelle__in', None)
if ct is not None and cl is not None:
self.filter_class = None
ct_query = query['caracteristique_text__icontains'][0].split(',')
cl_query = query['caracteristique__libelle__in'][0].split(',')
full_query = Q(caracteristique__libelle__in=cl_query)
ct = Q()
for value in ct_query:
ct_part = Q(caracteristique_text__icontains=value)
ct |= ct_part
full_query &= ct
self.queryset = self.queryset.filter(full_query)
return self.queryset
return models.MyModel.objects.order_by('pk')
这篇文章也可以是有用的过滤器或条件

TA贡献1111条经验 获得超0个赞
您需要使用 Django 过滤器指定一些过滤器。我想你只需要 BaseInFilter: https ://django-filter.readthedocs.io/en/master/ref/filters.html#baseinfilter
class MyModelFilter(ModelFilterSet):
caracteristique_text = BaseInFilter(field_name='caracteristique_text', lookup_exp='icontains')
libelle = BaseInFilter(field_name='libelle', lookup_exp='in')
class Meta:
model = appart.MyModel
fields = ('id', 'libelle', 'locataire_appart', 'bien_appart',
'adresse', 'loyer_appart', 'caracteristique', 'caracteristique_text',
'date_creation', 'derniere_maj')
添加回答
举报