django可以根据字典字段过滤查询集吗?

时间:2016-08-10 10:24:20

标签: python django filter django-rest-framework

我正在潜水到其他人编写和配置的django rest-api框架,我遇到了一个问题,我找不到任何好的解决方案。

有一个包含“YAMLField”类型字段的模型。在尝试检索此字段成员时,它将转换为OrderedDict(不太确定此转换发生的方式和位置......)。

现在,我有一个这个模型的查询集。我理解如何基于简单属性过滤查询集,但如何根据此字典过滤它?

例如,此查询集中的每个条目(MyModel实例)都包含:

MyModel.myDictionary == {'firstKey': 'firstVal', 'secondKey':'secondVal}

现在我想从这个查询集获取所有条目:

myDictionary = {'firstKey': 'Something'}

意思是,我的字典要过滤,可能只包含一部分键。

我找不到任何解决方案或直接的方法来执行此操作,导致我迭代查询集,并为每个条目迭代字典。 这感觉太开销......

2 个答案:

答案 0 :(得分:0)

你需要这是可能的。有关更多信息,请参阅django-rest-framework doc

class MultipleFieldLookupMixin(object):
    """
    Apply this mixin to any view or viewset to get multiple field filtering
    based on a `lookup_fields` attribute, instead of the default single field filtering.
    """
    def get_object(self):
        queryset = self.get_queryset()             # Get the base queryset
        queryset = self.filter_queryset(queryset)  # Apply any filter backends
        filter = {}
        for field in self.lookup_fields:
            filter[field] = self.kwargs[field]
        return get_object_or_404(queryset, **filter)  # Lookup the object

答案 1 :(得分:0)

我认为我遇到了同样的问题,有人告诉我一个简单的答案,就是在您的过滤请求中添加“ __ {dictionary_key}”,例如:

 Model.objects.all().filter(myDictionary__firstKey="Something")

尽管合并可能为时已晚,但我希望它将来对其他人有用!