来自字符串的 Django 查询集关键字

Django queryset keyword from string

这是我的模型

class Mymodel(models.Model):
  title = models.CharField(max_length=150)
  author = models.CharField(max_length=150)

我有一个像这样的 json 存储在数据库 q = {"field_name": "title", "value":"django"} 中,这就是我想要做的。

Mymodel.objects.filter(q["field_name"]=q["value"])

它不工作。获取错误

SyntaxError: keyword can't be an expression

我怎样才能让它工作?我尝试过

Mymodel.objects.filter(getattr(event_model, q["field_name"])=q["value"])

如果像下面这样的 elif 条件,可以使它像许多一样工作,但代码变得丑陋。有没有更简洁的方法来做到这一点?

if q["field_name"] == "title":
  Mymodel.objects.filter(title=q["value"])
elif q["field_name"] == "author":
  Mymodel.objects.filter(author=q["value"])

您可以使用字典解包技术,

q = {"field_name": "title", "value": "django"}

Mymodel.objects.filter(<b>**{q["field_name"]: q["value"]}</b>)