zoukankan      html  css  js  c++  java
  • python测试开发django(30)--admin后台多对多关系ManyToManyField

    前言

    一本书可以有多个作者,一个作者也可以写多本书,这种关系就是本篇要说的多对多关系。

    这种场景在django里面数据库设计时候,需要用到ManyToManyField方法

    多对多表设计

    auther(作者)表里面放作者的基本信息,book(书本信息)表放书的相关信息,书里面book_auth(作者)关联auther表。

    # coding:utf-8
    #models.py
    from django.db import models
    
    # Create your models here.
    #新建一个Man类,继承自models.Model
    class Authers(models.Model):
        names=models.CharField(max_length=10,verbose_name="作者")
        mails=models.CharField(max_length=30,verbose_name="邮箱")
        citys=models.CharField(max_length=10,verbose_name="城市")
        class Meta:
            verbose_name_plural='作者'
        def __str__(self):
            return self.names
    
    class Book(models.Model):
        book_name=models.CharField(max_length=50,verbose_name="书名")
        auth=models.ManyToManyField(Authers,verbose_name="作者")
        class Meta:
            verbose_name_plural="书籍详情"
        def __str__(self):
            return self.book_name
    

     admin.py设置后台页面显示,作者信息需遍历book的auth,然后用列表返回;

    # coding:utf-8
    # #admin.py
    from django.contrib import admin
    from tb import models
    
    admin.site.site_header="藏龙岛项目管理系统"
    admin.site.site_title="登录后台系统"
    admin.site.index_title='后台管理'
    class ControlAuther(admin.ModelAdmin):
        #显示字段
        list_display=["names","citys","mails"]
    
    class ControlBook(admin.ModelAdmin):
        #显示字段
        list_display=["book_name","auth"]
        #定义一个方法,遍历book的auth,然后用列表返回
        def auth(self,obj):
            return [a.name for a in obj.auth.all()]
    admin.site.register(models.Authers,ControlAuther)
    admin.site.register(models.Book,ControlBook)
    

     表设计好之后执行下面两句

    makemigrations会在当前目录下生成一个migrations文件夹,该文件夹的内容就是数据库要执行的内容

    python manage.py makemigrations
    

     migrate就是执行之前生成的migrations文件,这一步才是操作数据库的一步

    python manage.py migrate 

    admin后台页面

    打开admin后台管理页面添加几个作者信息

     再打开书籍信息页面,添加书名和作者,按住Ctrl键可以勾选多个作者

     数据库查看

    查看数据库会发现除了book表和authers表,还会多出一个book_auth表(自动生成的)

     book_auth表会自动记录对应关系

  • 相关阅读:
    STM32 变量无法赋值问题
    ROS 多台计算机联网控制机器人
    Content-Disposition
    Arrays.asList()与toArray()
    length与size()
    computeIfAbsent
    共享锁、排他锁与意向锁
    行锁、页面锁与表锁
    classpath是什么
    start、run、join
  • 原文地址:https://www.cnblogs.com/canglongdao/p/14118055.html
Copyright © 2011-2022 走看看