django mysql 表的一對一 一對多 多對多
表結構的設計
一對一
多對一 將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 %}
django mysql 表的一對一 一對多 多對多