一、多对多表设计,使用ManyToManyField字段进行关联。
书和作者关系:一本书可以由多个作者,一个作者可以出版多本书,故为多对多模式
1.1 models.py代码:
class Author(models.Model): """作者""" name = models.CharField(max_length=20,verbose_name="作者") mail = models.CharField(max_length=20,verbose_name="邮箱") address = models.CharField(max_length=50,verbose_name="籍贯") mobile = models.CharField(max_length=11,verbose_name="手机号") class Meta: verbose_name_plural = "作者" def __str__(self): return self.name class Book(models.Model): ''' 书籍信息 ''' book_name = models.CharField(max_length=100,verbose_name="书名") # 多对多 auth = models.ManyToManyField(Author,verbose_name="作者") class Meta: verbose_name_plural = "书籍" def __str__(self): return self.book_name
1.2 执行python manage.py makemigrations vote和python manage.py migrate
1.3 admin.py注册
class ControlAuthor(admin.ModelAdmin): list_display = ['name','mail','address','mobile'] class ControlBook(admin.ModelAdmin): list_display = ['book_name','book_auth']
# 定义一个方法,遍历book的auth,然后用列表返回 def book_auth(self,obj): return [a.name for a in obj.auth.all()] admin.site.register(models.Author,ControlAuthor) admin.site.register(models.Book,ControlBook)
1.4 浏览器访问结果:
添加完成书籍后,数据库会生成多对多的关系表