mysql在表单添加数据类型_django创建表单以及表单数据类型和属性

本文详细介绍了Django中的数据库模型关系,包括一对一、多对多关系的创建与查询方法,以及通过关系表和不通过关系表实现多对多关系的示例。同时,阐述了Django ORM与MySQL数据类型的对应关系,并列举了一些Django在admin中特有的数据类型和属性,如EmailField、FilePathField等,以及它们在验证和管理界面中的作用。
摘要由CSDN通过智能技术生成

08.15自我总结

关于django的表单不同关系之间的创建

一.不同关系之间的创建

1.一对一

举例

母表:userinfo

id

name

age

1

张三

12

2

李四

58

字表:private

id

salary

sp_id

1

100

1

2

400

2

models.py

class UserInfo(models.Model):

name = models.CharField(max_length=32, null=True)

age = models.IntegerField(null=True)

class Private(models.Model):

salary = models.CharField(max_length=32, null=True)

sp = models.OneToOneField("UserInfo", null=True) #oneTooneField: 一对一, 默认要求该字段必须是唯一的 unique 外键关系

插入信息

models.UserInfo.objects.create(name='张三',age=12)

models.Private.objects.create(salary=100,sp_id=1)

查询

#从母表查询子表中的数据

#方法1:res = models.UserInfo.objects.filter(name='张三').first().private.salary #子表表名小写.子表字段名

#方法2:res = models.UserInfo.objects.filter(name='张三').values('private__salary')

#从子表查询母表信息

#方法1:res = models.Private.objects.filter(salary='100').first().sp.name

#方法2:res = models.Private.objects.values('sp__name'):

2.多对多(通过关系表)

models.py

class Boy(models.Model):

bname = models.CharField(max_length=30,null=True)

class Girl(models.Model):

gname = models.CharField(max_length=30,null=True)

class Boy2Girl(models.Model):

b = models.ForeignKey('Boy',null=True)

g = models.ForeignKey('Girl',null=True)

#联合唯一属性

class Meta:

unique_together=[

('b','g')

]

插入信息

import random

boys =[

models.Boy(bname='男1'),

models.Boy(bname='男2'),

models.Boy(bname='男3'),

models.Boy(bname='男4'),

models.Boy(bname='男5'),

models.Boy(bname='男6')

]

res = models.Boy.objects.bulk_create(boys)

girls =[

models.Girl(gname='女1'),

models.Girl(gname='女2'),

models.Girl(gname='女3'),

models.Girl(gname='女4'),

models.Girl(gname='女5'),

models.Girl(gname='女6'),

models.Girl(gname='女7'),

models.Girl(gname='女8'),

]

models.Girl.objects.bulk_create(girls)

a = [

models.Boy2Girl(b_id=random.randint(1,6),g_id=1),

models.Boy2Girl(b_id=random.randint(1,6),g_id=2),

models.Boy2Girl(b_id=random.randint(1,6),g_id=3),

models.Boy2Girl(b_id=random.randint(1,6),g_id=4),

models.Boy2Girl(b_id=random.randint(1,6),g_id=5),

models.Boy2Girl(b_id=random.randint(1,6),g_id=6),

models.Boy2Girl(b_id=random.randint(1,6),g_id=7),

models.Boy2Girl(b_id=random.randint(1,6),g_id=8),

]

models.Boy2Girl.objects.bulk_create(a)

查询

#通过关系表查询,查boy位男1对于的女的信息

#方法1:res = models.Boy2Girl.objects.filter(b__bname='男1').values('g__gname')

#方法2:

res = models.Boy2Girl.objects.filter(b__bname='男1').all()

for a in res:

print(res.g.gname)

#通过boy表查女的信息

#方法1: res = models.Boy.objects.filter(bname='男1').values('boy2girl__g__gname')

#方法2:

res = models.Boy.objects.filter(bname='男1').all()

for a in res:

for b in a.boy2girl_set.all():

print(b.g.gname)

3.多对多(不通过关系表)

models.py

class Boy1(models.Model):

bname = models.CharField(max_length=32, null=True)

g = models.ManyToManyField('Girl', null=True)

#他会生成一个boy1_g的表

class Girl1(models.Model):

gname = models.CharField(max_length=32, null=True)

插入信息

boys =[

models.Boy(bname='男1'),

models.Boy(bname='男2'),

models.Boy(bname='男3'),

models.Boy(bname='男4'),

models.Boy(bname='男5'),

models.Boy(bname='男6')

]

res = models.Boy1.objects.bulk_create(boys)

#

girls =[

models.Girl(gname='女1'),

models.Girl(gname='女2'),

models.Girl(gname='女3'),

models.Girl(gname='女4'),

models.Girl(gname='女5'),

models.Girl(gname='女6'),

models.Girl(gname='女7'),

models.Girl(gname='女8'),

]

models.Girl1.objects.bulk_create(girls)

建立两者关系

取出boy的对象

再选择其中的g对象,再进行add添加|删除|查询girl的id

添加(add)

models.Boy1.objects.filter(bname='男1').first().g.add(1,2,3,4,5,2) #会自动去重保持唯一性也不会因为相同而报错

删除(remove)

models.Boy1.objects.filter(bname='男1').first().g.remove(1)

查询(all)

models.Boy1.objects.filter(bname='男1').first().g.all()

清除(clear)

models.Boy1.objects.filter(bname='男1').first().g.clear() #清除所有

注意点

add进行添加时候如果有会自动去重,他自带联合唯一的效果

4.一对多

二.mysql与djamgo-orm数据类型对应关系

数据类型

mysql

djamgo-orm

数字

tinyint

不存在

-

smallint

SmallIntegerField(有符号) PositiveSmallIntegerField(没符号)

-

mediumint

不存在

-

int (unsigned)

IntegerField(有符号)PositiveIntegerField(没符号)

-

bigint

BigIntegerField(有符号) PositiveBigIntegerField(没符号)

-

decimal

DecimalField

-

float

FloatField

-

double

不存在

字符串

char

不存在

-

varchar

CharField

-

text

TextField

时间日期

date

DateField

-

datetime

DateTimeField

-

timestamp

不存在

三.mysql与djamgo-orm数据类型对应属性

null 数据库中字段是否可以为空

db_column 数据库中字段的列名

default 数据库中字段的默认值

primary_key 数据库中字段是否为主键

db_index 数据库中字段是否可以建立索引

unique 数据库中字段是否可以建立唯一索引

class Meta:

### 联合唯一索引

unique_together=[

('b', 'g')

]

#### 联合索引

index_together = [

('b', 'g')

]

四.djamgo只在admin中生效的数据类型

EmailField(CharField):字符串类型对应信息是不是邮箱格式进行验证

IPAddressField(Field):字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制

GenericIPAddressField(Field):字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6

参数:

protocol:用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"

unpack_ipv4: 如如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"

URLField(CharField):字符串类型,Django Admin以及ModelForm中提供验证 URL

SlugField(CharField):字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)

CommaSeparatedIntegerField(CharField):字符串类型,格式必须为逗号分割的数字

UUIDField(Field):字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证

FilePathField(Field):字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能

参数:

path:文件路径

match=None:正则匹配

recursive=False:递归下面的文件夹

allow_files=True:允许文件

allow_folders=False:允许文件夹

ImageField(FileField):字符串类型 路径保存在数据库,文件上传到指定目录

参数:

upload_to = "" : 上传文件的保存路径

storage = None:存储组件,默认django.core.files.storage.FileSystemStorage

ImageField(FileField):上传图片的高度保存的数据库字段名(字符串)

height_field=None:上传图片的宽度保存的数据库字段名(字符串)

五.djamgo只在admin中生效的属性

verbose_name:Admin中显示的字段名称

blank:Admin中是否允许用户输入为空

editable:Admin中是否可以编辑

help_text:Admin中该字段的提示信息

choices:Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作

如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

error_messages: 自定义错误信息(字典类型),从而定制想要显示的错误信息;

from django.core.validators import RegexValidator

from django.core.validators import EmailValidator,URLValidator,DecimalValidator,

MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator

如:

test = models.CharField(

max_length=32,

error_messages={

'c1': '优先错信息1',

'c2': '优先错信息2',

'c3': '优先错信息3',

},

validators=[

RegexValidator(regex='root_\d+', message='错误了', code='c1'),

RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),

EmailValidator(message='又错误了', code='c3'), ]

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值