Loading

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)

 

posted @ 2018-08-16 16:30  别来无恙-  阅读(147)  评论(0)    收藏  举报