繁体   English   中英

Django可以基于字典字段过滤查询集吗?

[英]Can django filter queryset based on a dictionary field?

我正在研究别人编写和配置的django rest-api框架,但遇到一个我找不到任何好的解决方案的问题。

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

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

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

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

现在,我想从该查询集中获取所有条目,其中:

myDictionary = {'firstKey': 'Something'}

意思是,我要过滤的字典可能只包含键的子集。

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

您需要这是可能的。 有关更多信息,请参见django-rest-framework 文档。

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

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

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

尽管报价可能为时已晚,但我还是寄希望于将来对其他人有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM