在使用filter/Django ORM查找模型对象时,如何使用字符串变量作为字段名?

2024-06-16 10:10:26 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

PostModels = {
    'dPost': DPost,
    'sPost': SPost,
    'rPost': RPostModel,
}

for postType, Post in PostModels.items():
    try:
        post = Post.objects.get(pk=pk)
    except:
        pass
    else:
        return RPostModel.objects.filter(postType=post)

当我执行post = Post.objects.get(pk=pk)时,Post是for循环中的变量Post。因此,在第一个循环中,它搜索DPost中的对象,在下一个循环中,它搜索SPost等。但是,当它到达return语句时,它会给出一个错误,说:

django.core.exceptions.FieldError:
Cannot resolve keyword 'postType' into field.
Choices are: createdAt, dPost, dPost_id, sPost, sPost_id, rPost, rPost_id

如何使postType等于postType变量的值?换句话说,在循环中,如何使我的return语句成为以下语句:

return RPostModel.objects.filter(dPost=post)
return RPostModel.objects.filter(sPost=post)
return RPostModel.objects.filter(rPost=post)

而不是这个:

return RPostModel.objects.filter(postType=post)

Tags: idreturnobjects语句filterpostpkposttype