django-32.admin后台多对多关系ManyToManyField

前言

一本书可以有多个作者,一个作者也可以写多本书,这种关系就是本篇要说的多对多关系。
这种场景在django里面数据库设计时候,需要用到ManyToManyField方法

多对多表设计

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

# models.py
from django.db import models

# Create your models here.

class Auther(models.Model): '''作者''' name = models.CharField(max_length=10, verbose_name="作者") mail = models.CharField(max_length=30, verbose_name="邮箱") city = models.CharField(max_length=10, verbose_name="城市") class Meta: verbose_name_plural = '作者' def __str__(self): return self.name class Book(models.Model): '''书籍详情''' book_name = models.CharField(max_length=50, verbose_name="书名") auth = models.ManyToManyField(Auther, verbose_name="作者") class Meta: verbose_name_plural = '书籍详情' def __str__(self): return self.book_name

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

# admin.py
from django.contrib import admin
from hello import models # Register your models here. class ControlAuther(admin.ModelAdmin): # 显示的字段 list_display = ["name", "city", "mail"] class ControlBook(admin.ModelAdmin): # 显示的字段 list_display = ["book_name", "作者"] # 定义一个方法,遍历book的auth,然后用列表返回 def 作者(self, obj): return [a.name for a in obj.auth.all()] admin.site.register(models.Auther, ControlAuther) admin.site.register(models.Book, ControlBook)

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

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

python manage.py makemigrations

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

python manage.py migrate

admin后台页面

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

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

数据库查看

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

book_auther表会自动记录对应关系

 

一本书可以有多个作者,一个作者也可以写多本书,这种关系就是本篇要说的多对多关系。
这种场景在django里面数据库设计时候,需要用到ManyToManyField方法

多对多表设计

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

# models.py
from django.db import models

# Create your models here.

class Auther(models.Model): '''作者''' name = models.CharField(max_length=10, verbose_name="作者") mail = models.CharField(max_length=30, verbose_name="邮箱") city = models.CharField(max_length=10, verbose_name="城市") class Meta: verbose_name_plural = '作者' def __str__(self): return self.name class Book(models.Model): '''书籍详情''' book_name = models.CharField(max_length=50, verbose_name="书名") auth = models.ManyToManyField(Auther, verbose_name="作者") class Meta: verbose_name_plural = '书籍详情' def __str__(self): return self.book_name

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

# admin.py
from django.contrib import admin
from hello import models # Register your models here. class ControlAuther(admin.ModelAdmin): # 显示的字段 list_display = ["name", "city", "mail"] class ControlBook(admin.ModelAdmin): # 显示的字段 list_display = ["book_name", "作者"] # 定义一个方法,遍历book的auth,然后用列表返回 def 作者(self, obj): return [a.name for a in obj.auth.all()] admin.site.register(models.Auther, ControlAuther) admin.site.register(models.Book, ControlBook)

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

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

python manage.py makemigrations

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

python manage.py migrate

admin后台页面

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

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

数据库查看

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

book_auther表会自动记录对应关系

猜你喜欢

转载自www.cnblogs.com/jason89/p/10549275.html
0条评论
添加一条新回复