python - 如何从 django 中具有外键关系的两个模型中选择值
问题描述
我有两个模型,一个称为 person ,另一个称为 permission ,该 person 有一个称为 p_perm 的外键,它将权限模型与 perm_id 字段相关联,我想按 id 在 person 表中过滤并从中选择此人的相对权限值权限表
我的模型:
class Person(models.Model):
p_id = models.AutoField(primary_key=True)
p_fname = models.CharField(max_length=20)
p_perm = models.ForeignKey(Permission,
on_delete=models.DO_NOTHING, to_field="perm_id")
class Permission(models.Model):
perm_id = models.CharField( max_length=1, unique=True,
primary_key=True)
perm_label = models.CharField( max_length=30)
在我看来,我已经这样做了:
x = Person.objects.get(p_id=user)
print(x.p_perm)
y = Permission.objects.get(perm_id= x.p_perm)
print(y.perm_id)
解决方案
你可以做:
y = Permission.objects.get(perm_id=x.p_perm_id)
或者简单地说,这个对象可以直接从源模型实例中访问:
y = x.p_perm
但是请注意,这将触发两个 SQL 查询。您可以通过让 Django ORM 知道您需要访问外键来限制一个查询:
x = Person.objects.select_related('p_perm').get(p_id=user)
y = x.p_perm
它将执行适当的连接以一次检索 Person 和 Permission。
推荐阅读
- c# - 带有约束的 C# 模板
- python-3.x - 根据特定列年龄从数据框中获取所有唯一行并删除所选行
- javascript - 当 HTML 下拉菜单上的系统下拉菜单变得可见或模糊时,是否会调用任何操作?
- java - Collections.sort() 在编译时显示错误,而 TreeSet 中的 add() 方法在运行时显示
- html - 菜单链接未在 wordpress 的新页面中打开
- python - 熊猫从时间戳创建新的分类列
- python - 如何使用 Caffe 近似一个简单的加法?
- rest - 浏览器中的 Hmac 身份验证
- vba - Excel VBA 如何防止用户在 msoFileDialogSaveAs 中点击取消
- python - 计算列表中重复的字符串并打印