django创建表单以及表单数据类型和属性

django创建表单以及表单数据类型和属性,第1张

概述08.15自我总结 关于django的表单不同关系之间的创建 一.不同关系之间的创建 1.一对一 举例 母表:userinfo id| name| age | | 1 | 张三 |12 2| 李四 | 08.15自我总结关于django的表单不同关系之间的创建一.不同关系之间的创建1.一对一

举例

母表:userinfo
IDnameage
1张三12
2李四58
字表:private
IDsalarysp_ID
11001
24002
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 外键关系
@H_404_80@插入信息
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 randomboys =[    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,g_ID=2),g_ID=3),g_ID=4),g_ID=5),g_ID=6),g_ID=7),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='男6')]res = models.Boy1.objects.bulk_create(boys)#girls =[    models.Girl(gname='女1'),]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.一对多

https://www.cnblogs.com/pythonywy/p/11353202.html看这里

二.MysqL与djamgo-orm数据类型对应关系
数据类型MysqLdjamgo-orm
数字tinyint不存在
-smallintSmallintegerFIEld(有符号) PositiveSmallintegerFIEld(没符号)
-mediumint不存在
-int (unsigned)IntegerFIEld(有符号)PositiveIntegerFIEld(没符号)
-bigintBigIntegerFIEld(有符号) PositiveBigIntegerFIEld(没符号)
-decimalDecimalFIEld
-floatfloatFIEld
-double不存在
字符串char不存在
-varcharCharFIEld
-textTextFIEld
时间日期dateDateFIEld
-datetimeDateTimeFIEld
-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中提供验证 URLSlugFIEld(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.fileSystemStorageImageFIEld(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'),]
)

总结

以上是内存溢出为你收集整理的django创建表单以及表单数据类型和属性全部内容,希望文章能够帮你解决django创建表单以及表单数据类型和属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存