python - 无法创建 Django ValueError 对象,因为数据未验证

标签 python django

我正在尝试验证模型表单,但我收到此错误 The Member could not be created because the data didn't validate. 失败的行是 employee = form.save(commit = False).

这是我的表格:

class EmployeeForm(forms.ModelForm):
    class Meta:
        model = Member
        fields = ['first_name', 'last_name', 'customer_code', 'address1', 'address2', 'city', 'state', 'zip_code', 'telephone']

    def __init__(self, *args, **kwargs):
        super(EmployeeForm, self).__init__(*args, **kwargs)
        self.fields['first_name'].widget = TextInput(attrs={
            'placeholder': 'First Name'})
        self.fields['last_name'].widget = TextInput(attrs={
            'placeholder': 'Last Name'})
        self.fields['customer_code'].widget = TextInput(attrs={
            'placeholder': 'Customer Code'})
        self.fields['address1'].widget = TextInput(attrs={
            'placeholder': 'Address'})
        self.fields['address2'].widget = TextInput(attrs={
            'placeholder': 'Address Line 2'})
        self.fields['city'].widget = TextInput(attrs={
            'placeholder': 'City'})
        self.fields['state'].widget = TextInput(attrs={
            'placeholder': 'State'})
        self.fields['zip_code'].widget = TextInput(attrs={
            'placeholder': 'Zip Code'})
        self.fields['telephone'].widget = TextInput(attrs={
            'placeholder': 'Telephone'})

    def is_valid(self):
        #super(EmployeeForm, self).clean()
        if 'customer_code' in self.errors:
            del self._errors['customer_code']
        return self

这是我的观点:

@login_required
def employee_register(request):
    if request.method == 'POST':
        form = EmployeeForm(request.POST)
        if form.is_valid():
            print "FORM IS VALID"
            employee = form.save(commit = False)
            code = employee.customer_code
            try:
                employer = Member.objects.get(customer_code = code)
                print "GOT EMPLOYER"
                employee.employer = employer
            except ObjectDoesNotExist:
                print "NO EMPLOYER FOUND"
                error = "The customer code entered does not match a valid customer in our database."
                return render_to_response('app/employee_register.html', {'form' : form, 'error' : error}, context_instance = RequestContext(request))
            employee.user = request.user
            employee.role = "Attendee"
            employee.customer_code = None
            employee.save()
            print "SAVED USER"

            return HttpResponseRedirect(reverse('app:mainRouter'))
        else:
            print "FORM NOT VALID"
            return render_to_response('app/employee_register.html', {'form' : form}, context_instance = RequestContext(request))
    else:
        form = EmployeeForm()
        return render_to_response('app/employee_register.html', {'form' : form}, context_instance = RequestContext(request))

和我的模型:

class Member(models.Model):
    first_name = models.CharField(max_length = 30)
    last_name = models.CharField(max_length = 30)
    user = models.OneToOneField(User, null = False)
    email = models.EmailField(null = False)
    address1 = models.CharField(max_length=100)
    address2 = models.CharField(max_length=100, blank=True, null = True)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=2)
    zip_code = models.CharField(max_length=5)
    country = models.CharField(max_length=50, null = True, blank = True)
    telephone = models.CharField(max_length = 15)


    role_choices = (
        ('Attendee', 'Attendee'),
        ('Customer', 'Customer'),
        ('Registrar', 'Registrar'),
        ('Area Coordinator', 'Area Coordinator'),
        ('Admin', 'Admin'),
        ('Sales', 'Sales'),

        )

    role = models.CharField(choices = role_choices, max_length = 50)
    employer = models.ForeignKey('Member', null = True, blank = True)
    ## ATTENDEE FIELDS

    #employer_code = models.CharField(max_length = 50, null = True)
    electrosign = models.BooleanField(default = False)

    ##CUSTOMER FIELDS
    customer_code = models.CharField(max_length = 50, null = True, unique = True, blank = True)
    insurance = models.ForeignKey('Insurance', null = True, blank = True)


    def __unicode__(self):
        name = self.first_name + self.last_name
        return name

我不确定可能是什么问题,我在尝试保存对象之前检查表单 is_valid()。感谢所有帮助/建议,谢谢。

最佳答案

您必须覆盖is_valid

按照您完成的方式,您从 is_valid 返回 self,因为它不是 None、False 或空字符串或列表,所以它被认为是 True : 所以你的表格总是“有效的”。

自定义验证的正确方法是覆盖 clean 方法,这就是你应该在这里做的; clean 的正确返回值是 self.cleaned_data

关于python - 无法创建 Django ValueError 对象,因为数据未验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26701343/

相关文章:

python - 简单向量运算的优化 (python)

python - 按列减去 Numpy 数组

python - 物体尺寸测量

django - 如何使 Django 模型只读?

python - 在 Django 模板中嵌入 Plotly 图表

django - 分页返回错误的对象(不可迭代?)

javascript - Backbone.js 集合和 Tastypie 过滤器

python - 如何同时运行多个功能?

mysql 存储过程错误 (1172, 'Result consisted of more than one row')

python - 使用 SQLAlchemy 版本的 Python Eve 进行验证