引子:
目前主要做测试工作,好久没碰过django的orm了,今天有空了,复习一下
代码:
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)
class Book(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
# 外键 一对一 出版社和 书
publisher=models.ForeignKey(to="Publisher")
class Author(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
# 外键 多对多 作者和书
books=models.ManyToManyField(to="Book")
views.py
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE","day_orm.settings")
django.setup()
from django.shortcuts import render
# Create your views here.
from app01 import models
def orm_apply(request):
"""
复习 orm 增删改查
建表命令
python3 manage.py makemigrations
python3 manage.py migrate
:param request:
:return:
"""
# 增加
models.Publisher.objects.create(name="青龙")
# 查 使用get 一般 知道目标数据是唯一的 如果有多条 默认返回第一条
models.Publisher.objects.get(id=1)
models.Publisher.objects.get(name="青龙")
# 删除
obj=models.Publisher.objects.get(id=1).delete()
#修改
orm_obj=models.Publisher.objects.get(id=2)
orm_obj.name="白虎22"
orm_obj.save()
def orm_forkey(request):
"""
复习 外键的增删改查
:param request:
:return:
"""
# 增删改同上
# 查
book_obj=models.Book.objects.get(id=1)
# publisher_obj拿到的是 和书 关联的 Publisher的对象
publisher_obj=book_obj.publisher
# 第一种拿到 publisher_id 的方法
publisher_id_1=publisher_obj.id
publisher_name = publisher_obj.name
# 第二种拿到 publisher_id 的方法
# 在数据库中 实际生成的 数据 并没有publisher_id 这是因为
# 在Book类中 publisher=models.ForeignKey(to="Publisher") 判断如果是外间 就会生成一个publisher_id
publisher_id_2=book_obj.publisher_id
# 多对多关系
# books=models.ManyToManyField(to="Book") 在数据库中 orm 会自动创建第三张表 进行关联
#
author_obj=models.Author.objects.get(id=1)
author_obj.books.all() # 拿到了 所有的 和作者关联的 书的对象
# 给作者绑定多本书
author_obj.books.set([1,2,3]) # 书的主键id
#
def attr_local():
"""
locals globals 通常配合 反射使用
:return:
"""
# locals 返回当前 作用域 局部变量 dict
print(locals())
# globals 返回当前模块 所有变量 dict
print(globals())
if __name__ == ‘__main__‘:
print(attr_local())
#print(locals())
原文:https://www.cnblogs.com/yuan-x/p/14257136.html