Fork me on GitHub

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')

 

posted @ 2019-03-11 11:08  seymourgao  阅读(144)  评论(0编辑  收藏  举报