Django ORM训练专题
图书信息系统
表结构设计
class Book(models.Model): title = models.CharField(max_length=32) publish_date = models.DateField(auto_now_add=True) price = models.DecimalField(max_digits=5, decimal_places=2) memo = models.TextField(null=True) # 创建外键,关联publish publisher = models.ForeignKey(to="Publisher") # 创建多对多关联author author = models.ManyToManyField(to="Author") def __str__(self): return self.title # 出版社 class Publisher(models.Model): name = models.CharField(max_length=32) city = models.CharField(max_length=32) def __str__(self): return self.name # 作者 class Author(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() phone = models.CharField(max_length=11) detail = models.OneToOneField(to="AuthorDetail") def __str__(self): return self.name # 作者详情 class AuthorDetail(models.Model): addr = models.CharField(max_length=64) email = models.EmailField()
表结构说明:

练习题
查找所有书名里包含番茄的书
查找出版日期是2017年的书
查找出版日期是2017年的书名
查找价格大于50元的书
查找价格大于50元的书名和价格
查找memo字段是空的书
查找在北京的出版社
查找名字以沙河开头的出版社
查找作者名字里面带“小”字的作者
查找年龄大于30岁的作者
查找手机号是155开头的作者
查找手机号是155开头的作者的姓名和年龄
查找书名是“番茄物语”的书的出版社
查找书名是“番茄物语”的书的出版社所在的城市
查找书名是“番茄物语”的书的出版社的名称
查找书名是“番茄物语”的书的所有作者
查找书名是“番茄物语”的书的作者的年龄
查找书名是“番茄物语”的书的作者的手机号码
查找书名是“番茄物语”的书的作者的地址
查找书名是“番茄物语”的书的作者的邮箱
参考答案:
查找所有书名里包含番茄的书 ret = models.Book.objects.filter(title__contains="番茄") print(ret) 查找出版日期是2017年的书 ret = models.Book.objects.filter(publish_date__year=2017) print(ret) 查找出版日期是2017年的书名 ret = models.Book.objects.filter(publish_date__year=2017).values("title") print(ret) 查找价格大于50元的书 ret = models.Book.objects.filter(price__gt=50).values("title") print(ret) 查找价格大于50元的书名和价格 ret = models.Book.objects.filter(price__gt=50).values("title", 'price') print(ret) 查找memo字段是空的书 ret = models.Book.objects.filter(memo=None).values("title") print(ret) 查找在北京的出版社 ret = models.Publisher.objects.filter(city="北京").values("name") print(ret) 查找名字以沙河开头的出版社 ret = models.Publisher.objects.filter(name__startswith="沙河").values("name") print(ret) 查找作者名字里面带“小”字的作者 ret = models.Author.objects.filter(name__contains="小").values("name") print(ret) 查找年龄大于30岁的作者 ret = models.Author.objects.filter(age__gt=30).values("name", "age") print(ret) 查找手机号是155开头的作者 ret = models.Author.objects.filter(phone__startswith=155).values("name", "phone") print(ret) 查找手机号是155开头的作者的姓名和年龄 ret = models.Author.objects.filter(phone__startswith=155).values("name", "age") print(ret) 查找书名是“番茄物语”的书的出版社 ret = models.Book.objects.get(title="番茄物语").publisher print(ret) 查找书名是“番茄物语”的书的出版社所在的城市
models.Book.objects.filter(title="番茄物语").values("publisher__city")
或者:
ret = models.Book.objects.get(title="番茄物语").publisher.city print(ret)
查找书名是“番茄物语”的书的出版社的名称
models.Book.objects.filter(title="番茄物语").values("publisher__name")
或者:
ret = models.Book.objects.get(title="番茄物语").publisher.name print(ret)
print(ret)
查找书名是“番茄物语”的书的所有作者
models.Book.objects.filter(title="番茄物语").values("author__name")
或者:
ret = models.Book.objects.get(title="番茄物语").author.all() print(ret)
查找书名是“番茄物语”的书的作者的年龄
models.Book.objects.filter(title="番茄物语").values("author__age")
或者: ret = models.Book.objects.get(title="番茄物语").author.values("name", "age") print(ret)
查找书名是“番茄物语”的书的作者的手机号码
models.Book.objects.filter(title="番茄物语").values("author__phone")
或者: ret = models.Book.objects.get(title="番茄物语").author.values("name", "phone") print(ret) 查找书名是“番茄物语”的书的作者的地址
models.Book.objects.filter(title="番茄物语").values("author__detail__addr")
或者: ret = models.Book.objects.get(title="番茄物语").author.values("name", "detail__addr") print(ret) 查找书名是“番茄物语”的书的作者的邮箱
models.Book.objects.filter(title="番茄物语").values("author__detail__email")
或者: ret = models.Book.objects.get(title="番茄物语").author.values("name", "detail__email") print(ret)
人生是条无名的河,是浅是深都要过;
人生是杯无色的茶,是苦是甜都要喝;
人生是首无畏的歌,是高是低都要唱。

浙公网安备 33010602011771号