Forty-eight Django/ORM继承/多表操作

 

1、一条公式学正反查询(仅双下方法)

# 正向查询:查询丐帮出版社出版过的所有书籍的名字与价格(一对多)
query_result = models.Book.objects.filter(publish__name='丐帮出版社').values_list('title', 'price')
# Book(查询出发文件[首字母大写],由多到一),filter(过滤),publish__name(双下方法,指:跳转到publish表查询为''的name值并得到该对象),
# values_list('','')(对象对应的数据,用list收集的是值,括号内填入查询关键字,此时关键字是publish表的内容)
# 结果<QuerySet [('降龙十八掌', Decimal('140.00')), ('大狗棒法', Decimal('150.00'))]> <class 'django.db.models.query.QuerySet'>
# 反向查询:
query_result = models.Publish.objects.filter(name='丐帮出版社').values('book__title', 'book__price')
# Publish(查询出发文件[首字母大写],由一到多),name(指定,此时在publish里,所以不需要跳转到publish),
# value('','')(此时需要跳转到book,查询book里的title和price,不用list获取的是键值对)
# 结果<QuerySet [{'book__title': '降龙十八掌', 'book__price': Decimal('140.00')}, {'book__title': '大狗棒法', 'book__price': Decimal('150.00')}]> <class 'django.db.models.query.QuerySet'>
# 做题: 查询明教出版社出版过的所有书籍的名字以及作者的姓名 手机号以132开头的作者出版过的所有书籍名称以及出版社名称

 子表查询主表为正向查询(按字段),主表查询子表为反向查询(按表名)

2、一个html提交两个submit 可以会出错,解决方法就是用两个form将submit分开包含

3、多表操作

  1.设计表结构

  2.定义模型

  3.操作

# 添加的两种方式:
# 1.传对象的形式
book = models.Book.objects.create(title="打狗棒法", price=160, pub_date="2017-10-11", publish=pub_obj)
# 2.传对象id的形式
book = models.Book.objects.create(title="睡梦罗汉拳", price=160, pub_date="2017-10-11", publish_id=pub_obj.pk)

 

# 多对多
# 1.传对象
book_obj = models.Book.objects.filter(title="降龙十八掌").first()
    ling = models.Author.objects.filter(name="令狐冲").first()
    ying = models.Author.objects.filter(name="任盈盈").first()
    book_obj.authors.add(ling, ying)
# 2.传对象id
book_obj = models.Book.objects.filter(title="打狗棒法").first()
    ling = models.Author.objects.filter(name="令狐冲").first()
    xing = models.Author.objects.filter(name="任我行").first()
    book_obj.authors.add(ling.pk, xing.pk)  # 传对象pk值
# 注意book.publish 和 book.publish_id的区别是,前者是对象,后者是int数字

4、继承

# 创建模板html文件里,在一些位置写入
{% block title %}
{% endblock title %}

{% block content %}
# 这里可以有些内容 A
{% endblock content %}

# 新的html需要继承模板html文件,清空内容,写入
{% extends '模板.html' %}
# 此时继承了除block括起来外的所有内容
{
% block title %} # 这个位置可以放新内容 {% endblock title %} {% block content %} # 这个位置可以放新内容 # 如果要继承内容A,需要写 {{ block.supper }} {% endblock content %}

5、更多内容尽在这里

 

posted @ 2019-03-18 16:12  pythonernoob  阅读(207)  评论(0)    收藏  举报