我正在潜水到其他人编写和配置的django rest-api框架,我遇到了一个问题,我找不到任何好的解决方案。
有一个包含“YAMLField”类型字段的模型。在尝试检索此字段成员时,它将转换为OrderedDict(不太确定此转换发生的方式和位置......)。
现在,我有一个这个模型的查询集。我理解如何基于简单属性过滤查询集,但如何根据此字典过滤它?
例如,此查询集中的每个条目(MyModel实例)都包含:
MyModel.myDictionary == {'firstKey': 'firstVal', 'secondKey':'secondVal}
现在我想从这个查询集获取所有条目:
myDictionary = {'firstKey': 'Something'}
意思是,我的字典要过滤,可能只包含一部分键。
我找不到任何解决方案或直接的方法来执行此操作,导致我迭代查询集,并为每个条目迭代字典。 这感觉太开销......
答案 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")
尽管合并可能为时已晚,但我希望它将来对其他人有用!