Django中ORM之curd操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/T_I_A_N_/article/details/86319081

一、表和表之间的关系

  • 一对一,多对多,一对多

 models.py文件中创建的表,书和出版社是多对一,书和作者是多对多。

from django.db import models


# Create your models here.
class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32, null=False, unique=True)


class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32, null=False, unique=True)
    price = models.DecimalField(max_digits=5, decimal_places=2, default=99.99)
    count = models.IntegerField(default=1000)
    maichu = models.IntegerField(default=0)
    publisher = models.ForeignKey(to="Publisher", related_name='books')  


class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32, null=False, unique=True)
    book = models.ManyToManyField(to="Book")

二、单表的curd

# 增
    models.Publisher.objects.all().create(name='zhengzhou')
    # 删
    models.Publisher.objects.get(id=6).delete()
    # 改
    obj=models.Publisher.objects.get(id=3)
    obj.name='zhengzhou'
    obj.save()
    # 查
    ret = models.Publisher.objects.all()
    for i in ret:
        print(i.name)

 三、一对多的curd

  • 增删改操作和单表操作一样
book_obj=models.Book.objects.get(id=18) # 获取id=18 的书 的对象
publisher_obj = book_obj.publisher      # 获取和这本书关联的出版社对象
publisher_obj .name='人民出版社'         # 修改出版社对象的name属性
book_obj.publisher.save()               # 保存

 四、多对多的curd

  • 书和作者是多对多,一本书可以由多个作者写,多个作者写的书也可叫一个名字
# 查id=1的作者写的有哪些书
author_obj = models.Author.objects.get(id=1)
for i in author_obj.book.all():
    print(i.title)

 # 改
author_obj = models.Author.objects.get(id=1)     
author_obj.book.set([3,18])                      # 用set()
author_obj.save()                             

# 增
new_author = models.Author.objects.create(name='胡汉san')     # 新建一个作者对象
new_author.book.set([2,3,16])

# 删
dele_obj=models.Author.objects.get(id=14) # 获取要删除的对象
dele_obj.delete()

猜你喜欢

转载自blog.csdn.net/T_I_A_N_/article/details/86319081