0

我在 Django 1.6 中遇到了以下问题。

我尝试创建一个自定义 MultiValueField 并在提交表单期间捕获错误。错误出现在“django/forms/fields.py in clean, line 993”:

clean_data.append(field.clean(field_value))

Local vars:
field   <django.forms.widgets.TextInput object at 0x105f608d0>
field_value     u'+7'

似乎 django 试图调用 django.forms.widgets.TextInput 中不存在的 clean 方法

所以我有一个问题 - 是我做错了还是 django 错误?

我的自定义字段代码:

from django import forms


class PhoneWidget(forms.MultiWidget):
    def __init__(self, attrs=None):
        _widgets = (
            forms.HiddenInput(attrs={'value': '+7'}),
            forms.TextInput(attrs={'class': 'form-control'}),
        )
        super(PhoneWidget, self).__init__(_widgets, attrs)

    def decompress(self, value):
        if value:
            return value
        return [None, None]

    def format_output(self, rendered_widgets):
        from django.template.loader import render_to_string
        return render_to_string('parts/phone.html', {
                'phone_code': rendered_widgets[0],
                'phone_number': rendered_widgets[1]
            })


class PhoneField(forms.MultiValueField):
    widget = PhoneWidget()

    def __init__(self, required=False):
        phone_code = forms.TextInput()
        phone_number = forms.TextInput()
        super(PhoneField, self).__init__(required=required, fields=(phone_code, phone_number))

    def compress(self, data_list):
        return data_list

表格代码:

class OfficeForm(ModelForm):
    phone = custom_fields.PhoneField()

    class Meta:
        model = Office
        exclude = ['user']
        error_messages = {
            'name': {
                'required': "This is a required field",
            },
        }

    def clean_phone(self):
        data = self.cleaned_data['phone']
        return data

问题已结束。

问题是我将自定义字段声明为小部件......

phone_code = forms.TextInput()
phone_number = forms.TextInput()

它必须是

phone_code = forms.CharField()
phone_number = forms.CharField()
4

0 回答 0