表结构的设计
一对一
多对一 将key写在多
多对多
外键:
描述 多对一的关系
写在多的一方
class Book(models.Model)
title = models.CharField(max_length=32,unique=Ture)
publisher = models.ForeignKey (to=Publisher,on_deleete=models.CASADE)
publisher = models.ForeignKey(to=‘Publisher‘, on_delete=models.CASCADE) 加双引号,是映射
book_obj.publisher --->> 书籍关联的对象
book_obj.publisher_id --->> 书籍关联的对象id 直接从数据库获取的 可以直接点获得
设置外键(关联出版社对象 ) 修改
book_obj.publisher = 出版社对象
book_obj.save()
book_obj.publisher_id = 1
book_obj.save()
创建:
models.Book.objects.create(title=‘新的书名‘,publisher=models.Publisher.objects.get(id=1))
models.Book.objects.create(title=‘新的书名‘,publisher_id=1)
多对多
当要获取所有的对象中的另一个对象的时候,需要在函数中all() 在另一个html中all
teacher_all = models.teacher_list.objects.all() 这里的all取得是是所有的对象
{% for teacher in teacher_all %} 这里是获取每个对象
{% for cls in teacher.cls.all %} 这里获取的是是cls中的对象
class Author(models.Model):
name = models.CharField(max_length=32,unique=Ture)
books = models.ManyToManyField(‘book‘)
author_obj.books --->>> 不是关联的对象,是管理的对象
author_obj.books ---->> 获取到跟作者关联的所有书籍对象
author_obj.books.set([1,2,3,4]) ---->>不是author_obj.save() 增加和修改时候使用set
在获取多个对象时使用getlist 获取多个
模板相关
if判断
{% if book in edit_obj.books.all %}
<option value="{{ book.id }}" selected>{{ book.title }}</option>
{% else %}
<option value="{{ book.id }}">{{ book.title }}</option>
{% endif %}
{% if 条件1 %}
操作1
{% elif 条件2 %}
操作2
{% else %}
操作3
{% endif %}
for循环中
{% for i in name_list %}
{{ forloop.first }} 第一次循环
{{ forloop.last }} 最后一次循环
{% endfor %}
原文地址:https://www.cnblogs.com/lnrick/p/9614218.html