Django Form表单 META参数

from django import forms
from app01.models import UserInfo
from django.forms import fields as Ffields
from django.forms import widgets as Fwidgets
import time, datetime


class UserInfoModelForm(forms.ModelForm):
    age = Ffields.IntegerField(
        label='年龄',
        widget=Fwidgets.TextInput(attrs={'class': 'form-control'}),
        initial=22
    )
    gender = Ffields.CharField(
        label='性别',
        widget=Fwidgets.TextInput(attrs={'class': 'form-control'}),
        initial='男'
    )
    birth = Ffields.DateField(
        label='生日',
        widget=Fwidgets.DateTimeInput()
    )

    class Meta:
        # 与models建立了依赖关系.........................................
        model = UserInfo

        # 字段.........................................................
        fields = ['username', 'email', 'user_type', 'age']

        # 排除字段......................................................
        exclude = None,

        # 帮助提示信息...................................................
        help_texts = {
                         'username': '请输入账号',
                         'email': '请输入邮箱地址',
                         'user_type': '请选择客户类型'
                     },

        # 自定义插件.....................................................
        widgets = {
                      'username': Fwidgets.TextInput(attrs={'class': 'form-control'})
                  },

        # 自定义字段类(也可以自定义字段)...................................
        field_classes = {
            # 设置此处,前端输入时,就必须是url,否则提示错误
            # 'email': Ffields.URLField,
        }

        # 本地化,如:根据不同时区显示数据...................................
        localized_fields = ('ctime',)

        # 如果此处不写,会显示数据库模型设置的verbose_name....................
        labels = {
            'username': '账号',
            'email': '邮箱',
            'user_type': '类型'
        }

        # 自定义错误信息..................................................
        # 整体错误信息from django.core.exceptions import NON_FIELD_ERRORS
        error_messages = {
            '__all__': {
                'required': '此处不能为空'
            },
            'age': {
                'invalid': '请输入一个有效的年龄'
            }
        }

转载于:https://www.cnblogs.com/apollo1616/articles/9947832.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现Django中自定义的表单多级联动,需要使用到`ModelForm`和JavaScript来实现。 首先,我们需要创建一个ModelForm,用于实现表单的自定义字段和验证规则。 ```python from django import forms from .models import ModelA, ModelB class MyForm(forms.ModelForm): class Meta: model = ModelA fields = '__all__' # 可根据实际需求选择需要的字段 def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields['second_model'] = forms.ModelChoiceField(queryset=ModelB.objects.none()) if 'first_model' in self.data: try: first_model_id = int(self.data.get('first_model')) self.fields['second_model'].queryset = ModelB.objects.filter(first_model_id=first_model_id) except (ValueError, TypeError): pass elif self.instance.pk: self.fields['second_model'].queryset = self.instance.first_model.modelb_set.order_by('name') ``` 在上面的例子中,`ModelA`是第一个模型,`ModelB`是第二个模型。在`MyForm`类的初始化方法中,根据`first_model`字段的值动态更新`second_model`字段的queryset,实现了多级联动。 接下来,我们需要在模板中添加HTML和JavaScript来实现多级联动效果。 ```html <form method="POST" action=""> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> $(document).ready(function() { $('#id_first_model').change(function() { var url = $(this).attr('data-href'); var first_model_id = $(this).val(); $.ajax({ url: url, data: { 'first_model_id': first_model_id }, success: function(data) { $('#id_second_model').html(data); } }); }); }); </script> ``` 在上面的例子中,我们使用了jQuery来监听`first_model`字段的变化事件。当`first_model`字段的值发生改变时,执行AJAX请求,获取到对应`second_model`字段的选项,并更新页面上的`second_model`字段。 总结来说,我们通过自定义的表单类`MyForm`来实现外键的多级联动,然后通过JavaScript的AJAX请求和动态更新页面的选项来实现表单的多级联动效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值