• ORM 一对一的表间关系和多对多表间关系


    把数据表中一些使用不频繁的字段单独拿出来,做成一张表,然后原表用一对一的方式与这张新表进行关联

     1 class Author(models.Model):
     2     aid=models.AutoField(primary_key=True)
     3     aname=models.CharField(max_length=64,null=False,unique=True)
     4     book=models.ManyToManyField(to='Book')
     5     info = models.OneToOneField(to='AuthorInfo')
     6 
     7     def __str__(self):
     8         return '<Author Object:{}'.format(self.aname)
     9 
    10 class AuthorInfo(models.Model):
    11     holiday=models.CharField(max_length=48)
    12     addr=models.CharField(max_length=128)

     多对多表间关系:

    1,可以让Django框架自动生成

    2,可以自己手动创建第三张关系表,则无法使用内置的方法

    3,可以使用Django的 ManyToManyField方法,但指定创建表的关系属性列 自定义,add和remove无法使用

     1 class Book(models.Model):
     2     bid=models.AutoField(primary_key=True)
     3     bname=models.CharField(max_length=48,null=False,unique=True)
     4     press=models.ForeignKey(to='Press',related_name='books')    #外键关系
     5     price = models.DecimalField(max_digits=5, decimal_places=2, default=99.99)
     6     kucun=models.IntegerField(default=9999)
     7     sale=models.IntegerField(default=0)
     8 
     9 
    10     def __str__(self):
    11         return '<Book Object:{}'.format(self.bname)
    12 
    13 class Author(models.Model):
    14     aid=models.AutoField(primary_key=True)
    15     aname=models.CharField(max_length=64,null=False,unique=True)
    16     book=models.ManyToManyField(to='Book')
    17     info = models.OneToOneField(to='AuthorInfo')
    18     books=models.ManyToManyField(to='Book',through='Author_Book',through_fields=('author','book'))
    19 
    20     def __str__(self):
    21         return '<Author Object:{}'.format(self.aname)

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>指定第三张关系表:

    1 class Author_Book(models.Model):
    2     id=models.AutoField(primary_key=True)
    3     author=models.ForeignKey(to='Author')  #默认就是使用的id值
    4     book=models.ForeignKey(to='Book')
  • 相关阅读:
    pyspider 在ubuntu上安装失败怎么搞?
    怎么在项目中使用前端包管理器bower和构建工具gulp
    Asp.net mvc 实时生成缩率图到硬盘
    如果转载优酷、土豆视频等,怎么让视频自适应宽度?
    C语言II博客作业04
    C语言I博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    The first essay
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9597218.html
Copyright © 2020-2023  润新知