首页 > 代码库 > Django模型

Django模型

数据库表的设计

设计系统表

Django提供完善的模型(model)层主要用来创建和存取数据,不需要我们直接对数据库操作。

Django模型基础知识:
每个模型是一个Python类,继承django.db.models.model类。
该模型的每个属性表示一个数据库表字段。
所有这一切,已经给你一个自动生成的数据库访问的API。

1、打开.../sign/models.py文件,完成表的创建

from django.db import models


# Create your models here.
"""
发布会表和嘉宾表中默认都会生成自增id,而我们在创建模型时不需要声明该字段
发布会表中增加了status字段用于表示发布会的状态是否开启,用于控制该发布会是否可用
嘉宾表中通过event_id关联发布会表,一条嘉宾信息一定所属于某一场发布会
对于一场发布会来说,一般会选择手机号作为一位嘉宾的验证信息,所以,对于一场发布会来说,
手机号必须是唯一。除了嘉宾id外,这里通过发布会id+手机号来做为联合主键
"""


# 发布会表
class Event(models.Model):
    name = models.CharField(max_length=100)  # 发布会标题
    limit = models.ImageField()  # 参加人数
    status = models.BooleanField()  # 状态
    address = models.CharField(max_length=200)  # 地址
    start_time = models.DateTimeField(‘events time‘)  # 发布会时间
    create_time = models.DateTimeField(auto_now=True)  # 创建时间(自动获取当前时间)

    # __str__()方法告诉Python如何将对象以str的方式显示出来。所以,为每个模型类添加了__str__()方法
    # 如果是Python2.x的话,这里需要使用__unicode__()
    def __str__(self):
        return self.name


# 嘉宾表
class Guest(models.Model):
    event = models.ForeignKey(Event)  # 关联发布会id
    real_name = models.CharField(max_length=64)  # 姓名
    phone = models.CharField(max_length=16)  # 手机号
    email = models.EmailField()  # 邮箱
    sign = models.BooleanField()  # 签到状态
    create_time = models.DateTimeField(auto_now=True)  # 创建时间(自动获取当前时间)

    class Meta:
        unique_together = ("event", "phone")

    def __str__(self):
        return self.real_name

Django Models的数据类型,如下表:
(依据C:\Python35\Lib\site-packages\django\db\models\fields\__init__.py文件)

AutoField

 

IntegerField

BooleanField

true/false

 

CharField

maxlength,必填

 

TextField

 

 

CommaSeparatedIntegerField

maxlength,必填

逗号分隔

DateField

auto_now

可选,每次动作都会更新

auto_now _add

可选,一次产生

 

DateTimeField

auto_now

可选,每次动作都会更新

auto_now _add

可选,一次产生

 

EmailField

 

 

FileField

upload_to,可选

object.get_myfile_url

FilePathField

path

必填"/home/images"

match

可选,正则表达式,用于过滤文件名

recursive

可选,False,表示path的子目录是否包含在内

 

FloatField

max_digits

必填,数字长度

decimal_places

必填,即有效位数

 

 

ImageField

upload_to

 

height_field

可选

width_field

可选

需要验证,即Python Imaging Library

IntegerField

 

 

IPAddressField

 

 

NullBooleanField

 

相当于设置了null=True的BooleanField

PhoneNumberField

 

美国电话号码格式

PositiveIntegerField

 

正整数字段

PositiveSmallIntegerField

 

小的正整数字段,取决于数据库特性

SlugField

maxlength(50)

可选

db_index

默认为True

prepopulate_from

可选,用于指示在admin表单中的可选值

短标签,仅包含字母、数字、下划线、连字符,一般用于url

SmallIntegerField

 

小整数字段,依赖于数据库特性

TimeField

auto_now

可选,每次动作都会更新

auto_now _add

可选,一次产生

 

URLField

verify_exists(True),检查URL可用性

 

USStateField

 

两个字母表示的美国州名字段

XMLField

schema_path,必选

 

 

 

Django模型