python - django 查询集 select_related 。values() 重命名键
问题描述
使用python3.4 django 2.0.2
模型.py
class Userinfo(models.Model):
useruid = models.BigAutoField(db_column='UserUID', primary_key=True)
useremail = models.CharField(
db_column='UserEmail', unique=True, max_length=100)
userpassword = models.CharField(db_column='UserPassword', max_length=128)
passwordsalt = models.CharField(db_column='PasswordSalt', max_length=128)
userstatus = models.IntegerField(db_column='UserStatus', default=0)
username = models.CharField(
db_column='UserName', max_length=100, default=0)
class Meta:
managed = False
db_table = 'userinfo'
class Postinfo(models.model):
postuid = models.BigAutoField(db_column='PostUID', primary_key=True)
content = content = models.TextField(db_column='Content')
useruid = models.ForeignKey(
Userinfo, db_column='UserUID', on_delete=models.CASCADE)
class Meta:
managed = False
db_table = 'postinfo'
查询集
postquery = models.Postinfo.objects.all().select_related("useruid").order_by(
'-postuid')
后查询是
<QuerySet [{'content': 'test','postuid': 1, 'useruid_id': 1},OtherPosts...>
和
userinfoquery = postquery.values("useruid_id__username","useruid_id__userstatus","useruid_id")
用户信息查询是
<QuerySet [{'useruid_id__username': 'firstuser','useruid_id__userstatus': 0, 'useruid_id': 1},OtherUsers...>
我想要 useruid_id__username -> 用户名
useruid_id__userstatus -> 用户状态
useruid_id -> 用户uid
我试过这个
userinfoquery = postquery.values(
useruid="useruid_id", username="useruid_id__username", userstatus="useruid_id__userstatus")
此代码引发异常
QuerySet.annotate() received non-expression(s): useruid_id, useruid_id__uesrname, useruid_id__userstatus.
如何删除 useruid_id__
解决方案
从 Django 1.11 开始,您可以使用表达式 with values()
,查看发行说明。因此,您需要在F
查询中添加表达式:
from django.db.models import F
userinfoquery = postquery.values(
useruid=F("useruid_id"), username=F("useruid_id__username"), userstatus=F("useruid_id__userstatus"))
推荐阅读
- pybind11 - pybind11,将 std::vector 转换为 py::list
- php - 如何使用mysql php选择与字符串中的某些单词匹配的所有记录
- sql - 如何将三个查询合二为一并可能提高性能
- mikroc - 为什么我的 If 语句不能正常工作?
- java - 如何在这段代码中使用非静态变量?
- scala - Guice Scala 模块 - 没有有效的构造函数
- autodesk-forge - 访问 3ds Max 参数的 Forge 查看器
- visual-studio-2017 - 该项目是使用 Microsoft.NETCore.App 版本 2.2.0-preview3-27014-02 恢复的
- windows - Windows CMD 中的 Vim:防止 Windows 从 Vim 颜色方案写入注册表 HKCU\Console 颜色?
- android - 如何在信息窗口中添加对象使其变大