Django笔记(四)

本文详细介绍了Django框架中各种模型字段的使用方法,包括基本字段类型如CharField、DateField等,以及字段选项如null、default等。同时,通过具体实例展示了如何创建Author、Book等模型,并解释了数据迁移和版本切换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模型

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
Copy

创建Book表

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

同步数据到数据库

  • 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
Copy

商品表

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
Copy

用户表

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
Copy

数据的版本切换问题

  • 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 

转载于:https://www.cnblogs.com/gao_x/p/10509370.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值