Django笔记(四)

模型

1 字段类型

  • BooleanField() 布尔类型
  • CharField() 字符串类型
  • DateField() 日期类型
  • DateTimeField() 时间日期类型
  • DecimalField() 金融常用浮点类型
  • EmailField() 邮件类型 带判断
  • FloatField() 浮点类型
  • ImageField() 文件类型,存储图片路径
    • upload_to=’给相对路径(static/xx/xx)’ 会自动创建没有的文件夹
  • IntergerField()整数类型
  • URLField() 网址类型
  • TextField() 存大量文本数据的 – text

2 字段选项

  • null=true
    • 指定当前字段是否允许为空
    • 默认值是false
  • default=0
    • 为当前字段指定默认值
  • db_index=true 设置索引
  • max_length
    • 指定数据的最大长度
    • 在CharField()中必须设置的选项
  • on_delete
    • django2中的ForeignKey必选字段
    • on_delete=models.CASCADE

创建Author表

# 作者 Author:name age email
class Author(models.Model): name = models.CharField(max_length=32) age = models.PositiveSmallIntegerField() email = models.EmailField() 
Python

创建Book表

# 图书 Book:title publicate_date
class Book(models.Model): title = models.CharField(max_length=32) publicate_date = models.DateField(auto_now=True) 
Python

同步数据到数据库

  • python manage.py makemigrations
  • python manage.py migrate

练习:晚上天天生鲜美食表

  • 完善生鲜美食的表
  • 商品类型
    • 类型名称 title
    • 类型图片 picture
    • 默认上传至static/upload/goodstype
    • 类型描述 desc
  • 商品实体
    • 图片 picture(FileField)
    • 默认上传至static/upload/goods
    • 名称 name
    • 价格 price(DecimalField)
    • 产品规格 spec
    • 销售状态(在售,下架) isActive(BooleanField 默认值为true)
  • 用户实体 Users
    • 电话号码 uphone
    • 密码 upwd
    • 邮件 uemail
    • 用户名 uname
    • 用户状态 isActive 默认为True

商品类型表

class GoodsType(models.Model): title = models.CharField(max_length=32) picture = models.FileField(upload_to='static/upload/goodstype') 
Python

商品表

class Goods(models.Model): name = models.CharField(max_length=32) price = models.DecimalField(max_digits=5, decimal_places=2) spec = models.CharField(max_length=32) picture = models.FileField(upload_to='static/upload/goods') isActive = models.BooleanField(default=True) 
Python

用户表

class Users(models.Model): uphone = models.CharField(max_length=11) upwd = models.CharField(max_length=68) uemail = models.EmailField(null=True) uname = models.CharField(max_length=32) isActive = models.BooleanField(default=True) 
Python

数据的版本切换问题

  • python manage.py migrate
    • 执行所有应用中最新版本的数据库中间文件
  • python manage.py migrate 应用名称 版本号
    • 执行某应用某版本中的中间文件
    • 版本号是0001这样的数字,数字后面的不用管

通过数据库自动导出Models

  • python manage.py inspectdb > 文件名.py
    • 将数据库中的表全部导入到指定的文件

数据库自动导出测试结果

from __future__ import unicode_literals

from django.db import models class AuthGroup(models.Model): name = models.CharField(unique=True, max_length=80) class Meta: managed = False db_table = 'auth_group' class AuthGroupPermissions(models.Model): group = models.ForeignKey(AuthGroup, models.DO_NOTHING) permission = models.ForeignKey('AuthPermission', models.DO_NOTHING) class Meta: managed = False db_table = 'auth_group_permissions' unique_together = (('group', 'permission'),) class AuthPermission(models.Model): name = models.CharField(max_length=255) content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING) codename = models.CharField(max_length=100) class Meta: managed = False db_table = 'auth_permission' unique_together = (('content_type', 'codename'),) class AuthUser(models.Model): password = models.CharField(max_length=128) last_login = models.DateTimeField(blank=True, null=True) is_superuser = models.IntegerField() username = models.CharField(unique=True, max_length=150) first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) email = models.CharField(max_length=254) is_staff = models.IntegerField() is_active = models.IntegerField() date_joined = models.DateTimeField() class Meta: managed = False db_table = 'auth_user' class AuthUserGroups(models.Model): user = models.ForeignKey(AuthUser, models.DO_NOTHING) group = models.ForeignKey(AuthGroup, models.DO_NOTHING) class Meta: managed = False db_table = 'auth_user_groups' unique_together = (('user', 'group'),) class AuthUserUserPermissions(models.Model): user = models.ForeignKey(AuthUser, models.DO_NOTHING) permission = models.ForeignKey(AuthPermission, models.DO_NOTHING) class Meta: managed = False db_table = 'auth_user_user_permissions' unique_together = (('user', 'permission'),) class DjangoAdminLog(models.Model): action_time = models.DateTimeField() object_id = models.TextField(blank=True, null=True) object_repr = models.CharField(max_length=200) action_flag = models.SmallIntegerField() change_message = models.TextField() content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING, blank=True, null=True) user = models.ForeignKey(AuthUser, models.DO_NOTHING) class Meta: managed = False db_table = 'django_admin_log' class DjangoContentType(models.Model): app_label = models.CharField(max_length=100) model = models.CharField(max_length=100) class Meta: managed = False db_table = 'django_content_type' unique_together = (('app_label', 'model'),) class DjangoMigrations(models.Model): app = models.CharField(max_length=255) name = models.CharField(max_length=255) applied = models.DateTimeField() class Meta: managed = False db_table = 'django_migrations' class DjangoSession(models.Model): session_key = models.CharField(primary_key=True, max_length=40) session_data = models.TextField() expire_date = models.DateTimeField() class Meta: managed = False db_table = 'django_session' class IndexAuthor(models.Model): name = models.CharField(max_length=32) age = models.SmallIntegerField() email = models.CharField(max_length=254, blank=True, null=True) class Meta: managed = False db_table = 'index_author' class IndexBook(models.Model): title = models.CharField(max_length=32) publicate_date = models.DateField() class Meta: managed = False db_table = 'index_book' class IndexGoods(models.Model): name = models.CharField(max_length=32) price = models.DecimalField(max_digits=5, decimal_places=2) spec = models.CharField(max_length=32) picture = models.CharField(max_length=100) isactive = models.IntegerField(db_column='isActive') # Field name made lowercase. class Meta: managed = False db_table = 'index_goods' class IndexGoodstype(models.Model): title = models.CharField(max_length=32) picture = models.CharField(max_length=100) class Meta: managed = False db_table = 'index_goodstype' class IndexPublisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=20) city = models.CharField(max_length=20) country = models.CharField(max_length=20) website = models.CharField(max_length=200) class Meta: managed = False db_table = 'index_publisher' class IndexUsers(models.Model): uphone = models.CharField(max_length=11) upwd = models.CharField(max_length=68) uemail = models.CharField(max_length=254, blank=True, null=True) uname = models.CharField(max_length=32) isactive = models.IntegerField(db_column='isActive') # Field name made lowercase. class Meta: managed = False db_table = 'index_users' 
Python

模型中的增加数据

  • 通过ORM向DB中增加数据
    • Entry.objects.create(属性=值,属性=值…)
    • Entry:具体要操作的Model类
    • Author.objects.create(name='张三风',age='88')
  • 创建一个Models对象,通过对象的save()完成添加
    • obj=Author(name=’老手’,age=22)
    • obj.save()
  • 使用字典来构建对象,再用对象的save方法完成增加
    • d={‘name’:’我爱罗’,’age’=19}
    • obj=Entry(**d)
    • obj.save()

练习:使用三种方式分别向Book,Publisher中增加3条数据

# 增加作者
def addAuthor(request): # Author.objects.create(name='张三丰', age=88) # Author.objects.create(name='朱自清', age=33) # obj = Author(name='老手', age=22) # obj.save() # d = {'name': '我爱罗', 'age': 19} # obj = Author(**d) # obj.save() # 向Book中增加三条数据 # Book.objects.create(title='西游记') # b = Book(title='红楼梦') # b.save() # d = {'title': '三国演义'} # b = Book(**d) # b.save() # 向Publisher中增加三条数据 name address city county website Publisher.objects.create(name='北京出版社', city='北京', country='中国', website='aaa') p = Publisher(name='天津出版社', city='天津', country='中国', website='ttt') p.save() d = {'name': '上海出版社', 'city': '上海', 'country': '中国', 'website': 'sss'} p = Publisher(**d) p.save() return HttpResponse('ok') 

 

猜你喜欢

转载自www.cnblogs.com/gx-1/p/10509370.html