首页 > 解决方案 > 使用外键引用在 django 中过滤

问题描述

我的观点是接受查询参数并搜索满足该查询参数的场所。

 cuisine = self.request.query_params.getlist('cuisine', 0)
        if cuisine != 0:
            cuisinelist =[]
            for cuisine in cuisinelist:
                cuisinepk = get_object_or_404(Cuisine, name=cuisine)
                cuisinepk = cuisinepk.pk
                cuisinelist.append(cuisinepk)
                print('this is the cuisine pk')
                print(cuisinepk)
            venuelist = venuelist.filter(Q(cuisine1__in=cuisinelist) | Q(cuisine2__in=cuisinelist))

但实际上我没有得到任何归还的场地,这不起作用。

场地对象中的美食 1 和美食 2 如下所示。

cuisine1 = models.ForeignKey(Cuisine, on_delete=models.DO_NOTHING, related_name='cuisine1', blank=True, null=True)
    cuisine2 = models.ForeignKey(Cuisine, on_delete=models.DO_NOTHING, related_name='cuisine2', blank=True, null=True)

当我想检查房间内的关系时,我使用这种方法。我想知道我是否需要这样做?什么是正确的方法?

seatedcapacity = self.request.query_params.get('seatedcapacity',0)
        if seatedcapacity != 0:
            try:
                seatedcapacity = int(seatedcapacity)
            except ValueError:
                return Response(status=status.HTTP_400_BAD_REQUEST)
            rooms = Room.objects.filter(venue=OuterRef('pk'), seatedcapacity__gte=seatedcapacity)
            venuelist = venuelist.annotate(hasseatedcapacity=Exists(rooms))
            venuelist = venuelist.filter(Q(hasseatedcapacity=True) | Q(fullbuyoutseatedcapacity__gte=seatedcapacity))

标签: pythondjango-modelsdjango-rest-frameworkdjango-views

解决方案


推荐阅读