2013-03-13 138 views
1

我有一个应用程序,可以让你创建一个配置文件。 我的一个应用程序功能是让你编辑你的名字并上传图片。Django错误表单提交

问题是用户不能提交图像,除非他键入他的名字。我怎样才能修复这个页面,使它如此如果用户提交图像,但没有提交名称。他仍然有他的旧名 ,或者如果他不提交图像并更改他的名字。他仍然会有他的旧照片?

我尝试添加空白= 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

+0

您是否删除数据库并在修改名称字段后再次同步? – catherine 2013-03-13 10:13:18

+0

@catherine nope好吧我现在要做,但凯瑟琳(max_length = 100,null = True,空白= False)是正确的吗? – donkeyboy72 2013-03-13 10:17:22

+0

它是CharField所以'(max_length = 100,blank = True)' – catherine 2013-03-13 10:18:57

回答

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()}) 
+0

哦好吧谢谢你cathy,它的工作完美 – donkeyboy72 2013-03-13 10:42:33

1

Django表单确实对用户的数据

验证在两个层面上进行验证:

  1. 现场级:

    • 如果需要的领域和用户没有输入任何数据会引起错误
    • 如果用户输入了不正确格式的数据ield它会引发错误
    • 您可以通过实施命名为clean_fieldname
    • 这种类型的验证结果的功能form.field.errors
  2. 覆盖现场验证的行为形式层面:

    • 检查任何(非特定字段)验证错误
    • 您可以通过执行clean方法覆盖该行为
    • form.non_field_errors

从模型这种类型的验证结果:

图像不允许为空,这意味着它是必需的。不进入图像会产生一个错误

让空白=真为这两个名字和形象

我也建议使用form.save()在节能模式从意见

也有一个内置的ImageField保存图像

+0

我也感谢你的帮助 – donkeyboy72 2013-03-13 10:43:38