django 多表链接条件查询
时间: 2023-08-03 20:18:38 浏览: 96
在 Django 中,我们可以使用 ForeignKey 字段来建立多表之间的关联。假设我们有两个模型 A 和 B,B 中有一个外键字段指向 A,那么我们可以通过以下方式查询 A 和 B 中的数据:
```python
class A(models.Model):
name = models.CharField(max_length=50)
class B(models.Model):
a = models.ForeignKey(A, on_delete=models.CASCADE)
age = models.IntegerField()
# 查询 A 中 id 为 1 的数据以及与之关联的 B 中的数据
a = A.objects.get(id=1)
b_list = a.b_set.all()
```
在上面的代码中,a.b_set.all() 表示查询与 a 相关联的所有 B 数据,其中 b_set 是自动生成的反向关联字段。如果需要自定义反向关联字段名,可以使用 related_name 参数,例如:
```python
class B(models.Model):
a = models.ForeignKey(A, on_delete=models.CASCADE, related_name='bs')
age = models.IntegerField()
# 查询 A 中 id 为 1 的数据以及与之关联的 B 中的数据
a = A.objects.get(id=1)
b_list = a.bs.all()
```
如果需要进行条件查询,可以使用 filter 方法,例如:
```python
# 查询 A 中 name 为 'foo' 的数据以及与之关联的 B 中 age 大于等于 18 的数据
a = A.objects.get(name='foo')
b_list = a.b_set.filter(age__gte=18)
```
其中,双下划线 __ 表示查询条件的约束关系,例如 `age__gte=18` 表示查询 age 大于等于 18 的数据。更多查询条件可以参考 Django 官方文档。
阅读全文