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 %}

  

原文地址:https://www.cnblogs.com/lnrick/p/9614218.html