Django错误表单提交

时间:2013-03-13 09:57:42

标签: django

我有一个可以让你创建个人资料的应用。 我的应用功能之一就是让您编辑名称并上传图片。

问题是用户无法提交图像,除非他输入他的名字。如何修改此页面以使其成为如此用户如果用户提交图像但未提交姓名。他仍然会有他原来的名字 或者如果他没有提交图像并更改他的名字。他还会有他的旧照片吗?

我尝试添加blank = True和null = False,null = True但似乎没有完成这项工作

我的models.py

class Person(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100,null=True,blank=False)
    image = models.FileField(upload_to="images/")

    def __unicode__(self):
        return self.name

我的forms.py

 class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ('image','name',)

我的views.py

def Display(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('world:LoginRequest'))

    if request.method == 'POST':
        form = PersonForm(request.POST, request.FILES)
        if form.is_valid():
            person = Person.objects.get(user=request.user)
            person.image = form.cleaned_data['image']
            person.name = form.cleaned_data['name']
            person.save() 
    return render(request,'edit.html',{'form': PersonForm()})

enter image description here

2 个答案:

答案 0 :(得分:2)

class Person(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100, blank=True)
    image = models.FileField(upload_to="images/", blank=True)

    def __unicode__(self):
        return self.name

def Display(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('world:LoginRequest'))

    if request.method == 'POST':
        form = PersonForm(request.POST, request.FILES)
        if form.is_valid():
            image = form.cleaned_data['image']
            name = form.cleaned_data['name']

            person = Person.objects.get(user=request.user)

            if image:
                person.image = form.cleaned_data['image']
            if name:
                person.name = form.cleaned_data['name']

            person.save() 
    return render(request,'edit.html',{'form': PersonForm()})

答案 1 :(得分:1)

django表单对用户数据进行验证

验证在两个层面完成:

  1. 字段级别:

    • 如果该字段是必需的且用户未输入任何数据则会引发错误
    • 如果用户为该字段输入格式不正确的数据,则会引发错误
    • 您可以通过实现名为clean_fieldname
    • 的函数来覆盖字段验证的行为
    • 此类验证会导致form.field.errors
  2. 表单级别:

    • 检查任何(非特定于字段的)验证错误
    • 您可以通过实施clean方法
    • 来覆盖该行为
    • 此类验证会导致form.non_field_errors
  3. 来自你的模特:

    图像不允许为空白,这意味着它是必需的。不输入图像会引发错误

    对于名称和图像,请将blank = True

    我还建议使用form.save()而不是视图中的保存模型

    还有一个用于保存图像的内置ImageField