Django form.py正则使用方法及查询结果格式修正问题
问题1:解决查询结果为元组格式的问题
你当前用values_list()或values()返回的是元组/字典,导致选项显示为('Shirur')格式。只需给values_list()添加flat=True参数,就能返回纯文本值的迭代器,适配ModelChoiceField的需求:
修改后的代码:
Taluka1 = forms.ModelChoiceField(queryset=data.objects.values_list("taluka", flat=True).distinct()) Gut_Number = forms.ModelChoiceField(queryset=data.objects.values_list("gut_number", flat=True).distinct()) Village_Name_Revenue = forms.ModelChoiceField(queryset=data.objects.values_list("village_name_revenue", flat=True).distinct())
flat=True仅在values_list()指定单个字段时有效,它会把结果从元组(('Shirur',))转为纯字符串Shirur。- 不要用
values(),它返回字典对象,ModelChoiceField无法直接解析为选项文本。
问题2:在Django Form中使用正则表达式
Django提供两种常用方式实现正则验证:
方式1:用RegexValidator给字段添加验证规则
导入RegexValidator后,自定义验证规则并绑定到字段的validators参数:
from django.core.validators import RegexValidator from django import forms from .models import data # 自定义正则验证器:仅允许字母、空格和连字符 taluka_validator = RegexValidator( regex=r'^[a-zA-Z\s-]+$', message='Taluka名称只能包含字母、空格和连字符', code='invalid_taluka' ) class YourForm(forms.Form): Taluka1 = forms.ModelChoiceField( queryset=data.objects.values_list("taluka", flat=True).distinct(), validators=[taluka_validator] ) # 其他字段...
方式2:用RegexField直接定义带正则验证的输入字段
如果是普通文本输入字段(而非选择字段),可以直接用RegexField,它内置了正则验证:
from django import forms class YourForm(forms.Form): # 示例:验证电话号码格式 PhoneNumber = forms.RegexField( regex=r'^\+?\d{10,15}$', message='请输入有效的电话号码,格式如+12345678901', required=True )
内容的提问来源于stack exchange,提问作者Sandeep More
相关产品推荐
相关产品推荐

