Django ORM 实战:模型设计与查询技巧

0 下载量 11 浏览量 更新于2024-08-28 收藏 52KB PDF 举报
"Django ORM 的相关练习题及答案,涵盖了模型定义、外键与多对多关系、查询操作等知识点。" 在 Django 中,ORM(对象关系映射)是一种技术,它允许开发者使用 Python 对象来操作数据库。在这个练习中,我们首先看到了三个主要的模型:`Publisher`(出版社),`Book`(书籍)和`Author`(作者)。 `Publisher` 模型包含了两个字段:`name`(出版社名称)和`city`(所在城市)。`__str__` 方法用于返回一个友好的字符串表示,方便在调试时查看。 `Book` 模型包括`title`(书名)、`publish_date`(出版日期,设置为自动添加当前日期)、`price`(价格)和`memo`(备注)字段。`Publisher` 字段是一个外键,关联到`Publisher`模型,表示一本书由一个特定的出版社出版。 `Author` 模型有`name`(作者名称)、`age`(年龄)和`phone`(电话)字段。`books` 字段是一个多对多关系,表示一个作者可以有多本书,一本书也可以由多个作者共同创作。 接下来是一系列基于这些模型的查询题目: 1. 查找所有书名里包含"金老板"的书。 2. 查找出版日期是2018年的书。 3. 查找出版日期是2017年的书名。 4. 查找价格大于10元的书。 5. 查找价格大于10元的书名和价格。 6. 查找`memo`字段是空的书。 7. 查找在北京的出版社。 8. 查找名字以"沙河"开头的出版社。 9. 查找“沙河出版社”出版的所有书籍。 10. 查找每个出版社出版价格最高的书籍价格。 11. 查找每个出版社的名字以及出的书籍数量。 12. 查找作者名字里面带"小"字的作者。 13. 查找年龄。 要解答这些题目,我们需要使用 Django ORM 提供的查询API,例如 `Book.objects.filter()`,`Publisher.objects.get()` 等。这些查询语句可以结合各种条件表达式,如 `icontains`(不区分大小写的包含)、`year`(提取日期的年份)、`gte`(大于或等于)等,来实现对数据库的精确查询。 这个练习旨在帮助开发者熟悉 Django ORM 的用法,提升在实际项目中的数据库操作能力。通过解决这些问题,开发者可以更好地理解如何在 Django 中进行数据过滤、排序、聚合等操作。