Skip to main content
 首页 » 编程设计

python之渲染表单字段随机时间

2025年05月04日8xxx_UU

我对表单中的字段渲染有疑问。我有这段代码:

class RTForm(forms.ModelForm): 
 
    type_options = { 
        'error': { 
            'label': _('Error'), 
        }, 
        'warning': { 
            'label': _('Warning'), 
        }, 
        'off': { 
            'label': _('Disable'), 
        } 
    } 
 
    choice_type = forms.ChoiceField( 
        choices=[(k, v['label']) for k, v in type_options.items()], 
        required=True, widget=forms.RadioSelect( 
            attrs={ 
                class="choices" 
            } 
        ) 
    ) 
 
    class Meta: 
        model = RT 
 
    def __init__(self, *args, **kwargs): 
        self.rt = kwargs.pop('instance', None) 
 
        errors = create_error_list(rt.type) 
        warnings = create_warning_list(rt.type) 
 
        super(RTV, self).__init__(*args, **kwargs) 

我想做的是在我的模板上拥有与初始化列表中返回的错误/警告数量一样多的 choice_type 字段(每次不同的数字)。那可能吗?我想不出可能的解决方案。

请您参考如下方法:

在您使用 type ( http://docs.python.org/2/library/functions.html#type ) 创建的动态类的帮助下,您的要求将成为可能

我不确定我是否正确理解了您问题的业务需求,但是我会在 View 中执行类似的操作以创建自定义表单:

choice_type = forms.ChoiceField( # this is your class 
   choices=[(k, v['label']) for k, v in type_options.items()], 
   required=True, widget=forms.RadioSelect(attrs={ 
           class="choices" 
       }) 
) 
 
# let's say that I want my custom form to have two choice fields: 
formfields = {} 
formfields['choice_field1']= choice_type  
formfields['choice_field2']= choice_type  
 
# Now I can create my custom class 
form_class = type('CustomForm', (django.forms.Form,), formfields ) 
 
# Finally I will create an instance of my custom class 
form = form_class() 
 
# Ok ! form can be used in my view as any normal django form !!