首页 > 解决方案 > 如何从 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)

标签: pythondjango

解决方案


你可以做:

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。


推荐阅读