十四、Django学习之数据库表设计:多对多,一对一,一对多

一、多对多表设计,使用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 浏览器访问结果:

 添加完成书籍后,数据库会生成多对多的关系表

猜你喜欢

转载自www.cnblogs.com/chushujin/p/12533851.html