django 如何通过外键查询对应数据
时间: 2024-05-08 18:21:15 浏览: 81
在 Django 中,可以使用外键关系来连接两个模型。如果一个模型 A 有一个外键指向另一个模型 B,则可以通过 A 对象的外键字段来访问与 B 相关联的对象。
假设有两个模型 `Author` 和 `Book`,其中 `Book` 模型有一个外键指向 `Author` 模型:
```python
class Author(models.Model):
name = models.CharField(max_length=100)
# ...
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
# ...
```
可以通过 `Book` 模型的 `author` 字段来访问对应的 `Author` 对象:
```python
book = Book.objects.first()
author = book.author
```
也可以在查询 `Book` 对象的时候通过 `select_related` 方法来预先查询关联的 `Author` 对象,避免多次查询数据库:
```python
books = Book.objects.select_related('author').all()
for book in books:
author = book.author
# do something with author
```
还可以通过反向关联查询 `Author` 对象的所有相关书籍:
```python
author = Author.objects.first()
books = author.book_set.all()
```
其中 `book_set` 是默认的反向关联属性名,可以通过设置 `related_name` 参数来修改这个属性名:
```python
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
# ...
author = Author.objects.first()
books = author.books.all()
```
阅读全文