• Django多对多表的三种创建方式


    第一种:

      django orm自动帮我们创建:

      表一:

    class Book(models.Model):
        name = models.CharField(max_length=32)
        authors = models.ManyToManyField(to='Author')

      表二:

    class Author(models.Model):
        name = models.CharField(max_length=32)

      这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过这张表进行跨表查询,坏处是一张虚拟表,拓展性差。

    第二种:

      存手动创建第三张表:

    class Book(models.Model):
        name = models.CharField(max_length=32)
    class Author(models.Model):
        name = models.CharField(max_length=32)
    class Book2Author(models.Model):
        book = models.ForeignKey(to='Book')
        author = models.ForeignKey(to='Author')
        info = models.CharField(max_length=32)
        

      这种方式无法通过orm跨表查询(不要使用)

    第三种:

      半自动创建第三张表(可拓展性高,并且能够符合orm查询)

    class Book(models.Model):
        name = models.CharField(max_length=32)
        authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author')) # 哪张表创建的就优先写哪张表的小写
    class Author(models.Model):
        name = models.CharField(max_length=32)
    class Book2Author(models.Model):
        book = models.ForeignKey(to='Book')
        author = models.ForeignKey(to='Author')
        info = models.CharField(max_length=32)
  • 相关阅读:
    [Android学习笔记]Activity
    [Android学习笔记]Activity,View,Windows简介
    [Android]Eclipse的使用
    [Cocos2d-x]解决Android平台ndk-build时不自动删除外部库
    [Cocos2d-x]Android的android.mk文件通用版本
    [C++][STL]string记录
    nyoj-103-A+B Problem II
    nyoj-95-众数问题
    nyoj-187-快速查找素数
    nyoj-8-一种排序
  • 原文地址:https://www.cnblogs.com/ay742936292/p/11023716.html
Copyright © 2020-2023  润新知