系列文章目录
初识Django
django orm简介
ORM:对象关系映射
将“类”映射为“表”、
将“对象”映射为“记录“
将”对象获取属性的方法“映射为“记录某个字段对应的值”
ORM无法创建库 需要提前创建好
orm创建表
在models.py中书写代码
from django.db import models
class User(models.Model):
id = models.AutoField(primary_key=True,verbose_name='用户名')
"""
CharFiled方法参数必须指定max_length的值
verbose_name是这个字段名的含义(解释)
"""
username= models.CharField(max_length=64)
password = models.IntegerField()
数据库迁移命令
python3 manage.py makemigrations
python3 manage.py migrate
"""
只要修改了models.py中的代码就必须重新迁移数据
orm会自动创建主键字段,但名字固定为id
CharField字段类型必须有max_length参数
"""
字段的增删改查
password = models.IntegerField(verbose_name='密码',null=True)
age = models.IntegerField('年龄',default=18)
1、当表中已经存在数据,可以在终端中直接给出默认值
2、在models.py文件中添加字段时可以直接给出null=True
eg:info = models.CharFiled(max_length=32,verbose_name='个人简介',null=True)
3、给出该字段默认值
eg:hobby = models.CharFiled(max_length=32,verbose_name='兴趣爱好',defult='study')
在models.py中找到你要改的类名(表)和属性(字段)直接修改即可,无论是类型和名字都一样。直接修改
注意修改完成后一定要执行迁移数据库的 python manage.py makemigrations 和 python manage.py migrate 两条命令
想要删除字段,直接把类里对应的属性(字段)注释掉,在执行数据库迁移两条命令即可。非常简单
但是你删除字段后字段下的所有数据也没了
数据的增删改查
创建表字段
models.py
from django.db import models
class User(models.Model):
"""
User表中的username字段、password字段、register_time字段、is_delete字段
"""
username = models.CharField(max_length=32,verbose_name='用户姓名')
password = models.IntegerField(verbose_name='用户密码')
register_time = models.DateTimeField(auto_now=True)
is_delete = models.BooleanField(default=False)
def __str__(self):
return self.username
views.py
from django.shortcuts import render, redirect, HttpResponse
from app01 import models
def reg(request):
"""
:param request:
:return:
接受用户输入数据
"""
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
is_exists = models.user.objects.filter(name=username)
if is_exists:
return HttpResponse('用户已存在')
models.user.objects.create(name=username, pwd=password)
return redirect('/home/')
return render(request, 'reg.html')
def home(request):
user_data = models.user.objects.all()
return render(request, 'home.html', locals())
def user_update(request, edit_id):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
models.user.objects.filter(id=edit_id).update(name=username, pwd=password)
return redirect('/home/')
edit_obj = models.user.objects.filter(id=edit_id).first()
return render(request, 'user_update.html', locals())
def data_delete(request, delete_id):
models.user.objects.filter(id=delete_id).delete()
return redirect('/home/')
models.User.objects.filter(id=delete_id).update(is_delete=True)
return redirect('/home/')
总结
username = request.POST.get('username')
password = request.POST.get('password')
obj = models.User.objects.create(username=username,password=password)
obj = models.User(username=username,password=password)
obj.save()
obj = models.User.objects.filter(username=username).delete()
obj = models.User.objects.filter(username=username).update(is_delete=True)
obj = models.User.objects.filter(username=username).update(age=age)
obj = models.User.objects.filter(username=username).all()
obj = models.User.objects.all()
ORM外键创建
一对多外键关系
"""在orm中 外键字段建在多的一方"""
多对多外键关系
"""在orm中 可以直接写在查询频率较高的表中(自动创建第三张表)"""
一对一外键关系
"""在orm中 直接写在查询频率较高的表中"""
class book(models.Model):
"""
书和作者是多对多的关系
"""
name = models.CharField(max_length=32,verbose_name='书名')
title = models.CharField(max_length=32,verbose_name='书标题')
pulish = models.ForeignKey(to='pulish')
author = models.ManyToManyField(to='author')
class author(models.Model):
"""
作者
"""
author_name = models.CharField(max_length=32,verbose_name='作者姓名')
author_entro = models.OneToOneField(to='author_entros')
"""
ForeignKey OneToOneField 会自动给字段加_id后缀
"""
class pulish(models.Model):
"""
出版社
"""
pulish_name = models.CharField(max_length=32,verbose_name='出版社名称')
pulish_addr = models.CharField(max_length=32,verbose_name='出版社地址')
pulish_phone = models.CharField(max_length=32,verbose_name='出版社电话')
class author_entros(models.Model):
"""
作者详情
"""
phone = models.BigIntegerField(verbose_name='作者联系方式')
addr = models.CharField(max_length=32,verbose_name='作者住址')
|