2013-03-13 168 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