You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:15:36