model中定义的HEIGHT 为 HEIGHT = models.IntegerField(verbose_name="身高(cm)") 为什么 if db_field.name == 'HEIGHT' and isinstance(formfield.widget, TextInput): def validate_height(value): if not value.isdigit() or value < 100: raise ValidationError('请输入正确的身高(cm)') formfield.widget.input_type = 'number' formfield.validators.append(validate_height) return formfield不能达到检查HEIGHT的有效性的目的?
时间: 2024-02-14 20:18:50 浏览: 19
虽然在model中定义了身高字段的限制,但是在表单中,用户输入的字段可能会被修改或者篡改。因此,使用上述代码,可以在表单中对输入的身高进行更加严格的验证,确保用户输入的身高符合要求。具体来说,这段代码将表单中的身高字段的输入类型修改为数字类型,并添加了一个自定义的验证函数validate_height,用于验证输入的身高是否符合要求。如果输入的身高不是数字或小于100,则会抛出一个ValidationError异常。这样就可以保证输入的身高符合要求,从而确保数据的完整性和正确性。
相关问题
class Tbookinfo(models.Model): """教材信息""" bnumber = models.IntegerField(verbose_name='教材编号',max_length=32,primary_key=True) bname = models.CharField(verbose_name='书名',max_length=32) price = models.CharField(verbose_name='价格', max_length=32) quantity = models.CharField(verbose_name='数量', max_length=32) class Meta: db_table = 'tbookinfo'class Lmanagement(models.Model): """入库管理""" bnumber = models.IntegerField(verbose_name='教材编号',max_length=32,default='') bname = models.CharField(verbose_name='书名',max_length=32,default='') quantity = models.CharField(verbose_name='数量', max_length=32,default='') loquantity = models.CharField(verbose_name='入库数量', max_length=32,default='') warehousingtime = models.DateTimeField(verbose_name='入库时间', max_length=32,auto_now_add=True) class Meta: db_table = 'lmanagement' class Omanagement(models.Model): """出库管理""" bnumber = models.IntegerField(verbose_name='教材编号',max_length=32,default='') bname = models.CharField(verbose_name='书名',max_length=32,default='') quantity = models.CharField(verbose_name='数量', max_length=32,default='') loquantity = models.CharField(verbose_name='出库数量', max_length=32,default='') outboundtime = models.DateTimeField(verbose_name='出库时间', max_length=32,auto_now_add=True) class Meta: db_table = 'omanagement'当入库数量或出库数量改变时,Tbookinfo的quantity 也要跟着改变,怎么写出代码
可以在Lmanagement和Omanagement的save()方法中,通过更新Tbookinfo的quantity来实现。
代码如下:
class Tbookinfo(models.Model):
"""教材信息"""
bnumber = models.IntegerField(verbose_name='教材编号',max_length=32,primary_key=True)
bname = models.CharField(verbose_name='书名',max_length=32)
price = models.CharField(verbose_name='价格', max_length=32)
quantity = models.CharField(verbose_name='数量', max_length=32)
class Meta:
db_table = 'tbookinfo'
class Lmanagement(models.Model):
"""入库管理"""
bnumber = models.IntegerField(verbose_name='教材编号',max_length=32,default='')
bname = models.CharField(verbose_name='书名',max_length=32,default='')
quantity = models.CharField(verbose_name='数量', max_length=32,default='')
loquantity = models.CharField(verbose_name='入库数量', max_length=32,default='')
warehousingtime = models.DateTimeField(verbose_name='入库时间', max_length=32,auto_now_add=True)
class Meta:
db_table = 'lmanagement'
def save(self, *args, **kwargs):
tbookinfo = Tbookinfo.objects.get(bnumber=self.bnumber)
tbookinfo.quantity = str(int(tbookinfo.quantity) + int(self.loquantity))
tbookinfo.save()
super(Lmanagement, self).save(*args, **kwargs)
class Omanagement(models.Model):
"""出库管理"""
bnumber = models.IntegerField(verbose_name='教材编号',max_length=32,default='')
bname = models.CharField(verbose_name='书名',max_length=32,default='')
quantity = models.CharField(verbose_name='数量', max_length=32,default='')
loquantity = models.CharField(verbose_name='出库数量', max_length=32,default='')
outboundtime = models.DateTimeField(verbose_name='出库时间', max_length=32,auto_now_add=True)
class Meta:
db_table = 'omanagement'
def save(self, *args, **kwargs):
tbookinfo = Tbookinfo.objects.get(bnumber=self.bnumber)
tbookinfo.quantity = str(int(tbookinfo.quantity) - int(self.loquantity))
tbookinfo.save()
super(Omanagement, self).save(*args, **kwargs)
class WeiBo(models.Model): id = models.AutoField(primary_key=True) content = models.CharField(max_length=256,verbose_name='微博正文') img = models.CharField(max_length=256,verbose_name='原始图片url') time = models.DateTimeField(verbose_name='发布时间') gongju = models.CharField(max_length=128,verbose_name='发布工具') dianzan = models.IntegerField(verbose_name='点赞数') zhuanfa = models.IntegerField(verbose_name='转发数') pinglun = models.IntegerField(verbose_name='评论数') url = models.CharField(max_length=256, verbose_name='微博链接') emotion_chooice = ( ('正向','正向'), ('负向','负向'), ) name = models.CharField(max_length=128,verbose_name='用户昵称',default='') weizhi = models.CharField(max_length=128,verbose_name='发布位置',default='') topic = models.CharField(max_length=128,verbose_name='话题',default='') emotion = models.CharField(max_length=256, verbose_name='情感分类',choices=emotion_chooice,null=True)
这是一个 Django 中的模型类,表示一个微博的数据结构。其中,每个字段都代表着微博的不同属性,比如微博正文、发布时间、点赞数等等。这些字段可以用来存储微博的各种信息,并且可以通过 Django 的 ORM(对象关系映射)机制来操作数据库。其中,情感分类字段使用了一个 choices 参数来限制字段的取值范围,只能是正向或负向两种情感。