Django03-model
来源:互联网 发布:手机淘宝开店怎么激活 编辑:程序博客网 时间:2024/06/03 11:13
以一个积分系统作为示例
创建模型
首先在app中修改models.py定义两个模型User和Points
from django.db import modelsclass User(models.Model): id=models.indexes username=models.CharField(max_length=200) password=models.CharField(max_length=200) role=models.CharField(max_length=200) class Points(models.Model): user=models.ForeignKey(User,on_delete=models.CASCADE) value=models.IntegerField(default=0) deriver=models.CharField(max_length=500)
每个模型都都被表示为一个Model的子类,其中的每个成员变量表示模型的一个字段。每个字段都是一个Field类的实例,如果不将字段名作为第一个参数传入,就使用变量的名称。有些Field类必须要参数,比如CharField需要max_length来限定长度。使用外键来定义表之间的关系,包括多对一、多对多、一对一。
激活模型
在project的setting.py中注册app
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'PointsPlus.apps.PointsplusConfig']
运行命令
python manage.py makemigrations PointsPlus
会在app目录下的migrations目录中生成0001_initial.py(数字表示版本,之后会模型进行修改再运行该命令会生成0002)文件,这里保存了Django对模型是如何做改变的,可以进行修改。
运行命令
python manage.py sqlmigrate PointsPlus 0001
该命令只是打印出需要执行的sql语句,并不在数据库上实际运行。自动生成结合了app名称和model名称的表名,自动添加主键id,外键会在字段名称后加_id,外键关系通过FOREIGN KEY约束来显式生成。具体的sql语句和使用的数据库有关。
运行命令
python manage.py migrate
真正执行sql语句。migrate命令执行所有未被应用的migration(在django_migrations表中记录)同步做的改变。
之后就可以使用模型
from PointsPlus import User,Pointsu=User(username="admin",password="admin",role="admin")u.save()print(u.id)u.username="admin01"u.save()# 所有的userUser.objects.all()为了能够直观地看到模型的内容和进行更多的修改,我们对模型做一些修改,字段的修改需要再运行migrate,在指定之前记录的join_date是使用timezone.now()
import datetimefrom django.db import modelsfrom django.utils import timezoneclass User(models.Model): id=models.indexes username=models.CharField(max_length=200) password=models.CharField(max_length=200) role=models.CharField(max_length=200) join_date=models.DateTimeField('date joined') def __str__(self): return self.id+" "+self.username+" "+self.role def was_joined_recently(self): return self.join_date>=timezone.now()-datetime.timedelta(days=1) class Points(models.Model): user=models.ForeignKey(User,on_delete=models.CASCADE) value=models.IntegerField(default=0) deriver=models.CharField(max_length=500) def __str__(self): return self.user.username+" "+self.value+" "+self.deriver运行命令
python manage.py shellimport djangofrom PointsPlus.models import User,PointsUser.objects.all()u=User.objects.get(id=1)u.username="admin01"u.save()User.objects.filter(username="admin01")from django.utils import timezonecurrent_year=timezone.now().yearUser.objects.get(join_date__year=current_year)User.objects.get(id=2)u.was_joined_recently()p=Points(user=u,value=1,deriver="test")p.save()u.points_set.all()p1=u.points_set.create(value=1,deriver="test")u.points_set.create(value=2,deriver="test")p1.valueu.points_set.all()u.points_set.count()p2=u.points_set.filter(value=2)p2.delete()
参考链接:
https://docs.djangoproject.com/en/1.11/intro/tutorial02/
阅读全文
0 0
- Django03-model
- Django03-视图与网址
- Python 快速教程(Django03): 所谓伊人
- Model?
- Model
- model
- model
- Model
- model
- Model
- model
- Model
- model
- model
- Model
- model
- Model
- model
- 我为什么要再给lua写一个json模块
- 交叉编译strace
- java研发爬虫,抓取知乎,CSDN用户信息
- CentOS下Git的服务器版安装和使用
- linux 查看端口占用情况
- Django03-model
- Mysql学习笔记三
- c++xml文件
- centos7安装遇到的问题
- 多级 checkbox 父子类关联勾选
- 虚拟机中的CentOS联网
- oracle UUID生成
- 传入图片,按比例缩放拼接图片
- 简单的servlet实例,实现登录信息传送