假设我有以下型号:
Model A:
date
category
something
...
和
Model B:
date
category
...
我想创建一个Q对象,它将按date
,category
和something
进行过滤,但只有在模型中存在我才会应用过滤器。
换句话说,我可以在Q
和A
模型上应用的B
个B
,something
B
过滤器被忽略,因为此字段不存在于Q
。
如果我尝试一个简单的实现,例如date
category
,something
和B
,当应用于FieldError: Cannot resolve keyword 'something' into field. Choices are...
模型时,我会得到以下错误:
something
这是有道理的,因为B真的没有一个名为@Controller
的字段。但我希望改变这种行为并使其工作,只是忽略不存在的字段而不是抛出异常。
这可能吗?
答案 0 :(得分:2)
没有。但是,您可以编写一个检查模型字段的函数,并生成相应的Q对象。类似的东西:
def content_query(model, value):
allowed = ['date', 'category', 'something']
model_fields = [f.name for f in model._meta.fields and f.name in allowed]
return Q(**{f: value for f in model_fields})