Django 进行自定义筛选,合并两个字段

Django 进行自定义筛选,合并两个字段,django,django-rest-framework,Django,Django Rest Framework,我有一个django rest框架模型,定义如下 class Test(models.Model): id = models.IntegerField(primary_key=True, unique=True) username = models.CharField(max_length=256) 我希望生成一个自定义查找方法,该方法将接收id或用户名并返回相同的结果。例如,如果我调用api/Test/?custom\u lookup\u method=12345或api/T

我有一个django rest框架模型,定义如下

class Test(models.Model):
    id = models.IntegerField(primary_key=True, unique=True)
    username = models.CharField(max_length=256)

我希望生成一个自定义查找方法,该方法将接收id或用户名并返回相同的结果。例如,如果我调用api/Test/?custom\u lookup\u method=12345或api/Test/?custom\u lookup\u method=john\u smith等api来返回相同的筛选结果。这可能吗?

对于ModelViewset,您可以自定义get\u queryset

class TestViewSet(viewsets.ModelViewSet):

    serializer_class = YourSerializer
    def get_queryset(self):
        value = self.kwargs['query']
        queryset = Test.objects.filter(Q(id__contains=value) |
                                Q(username__icontains=value))
        return queryset
#urls.py
router.register(r'test/(?P<query>[0-9A-Za-z]+)', TestViewSet)
class TestViewSet(ViewSet.ModelViewSet):
serializer\u class=YourSerializer
def get_queryset(自我):
value=self.kwargs['query']
queryset=Test.objects.filter(Q(id\uu=value)|
Q(用户名\图标=值))
返回查询集
#url.py
路由器寄存器(r'test/(?P[0-9A-Za-z]+)',TestViewSet)

现在运行test/?query=12345或test/?query=john

它从未进入方法过滤器\u querysorry,现在它进入方法仍然没有进入请使用api/test/?lookup=12345或api/test/?lookup=john\u Smith我正在使用它,正如您所说的