首先是代碼。 的的ModelForm(IM 1和IM是models.ImageField):帶有ImageFields的ModelForm,如果驗證錯誤未正確清除
class TestForm(forms.ModelForm):
checkme = forms.BooleanField(required=True)
class Meta:
model = UserProfile
fields = ('im1', 'im2')
的觀點:
def test(request):
profile = request.user.get_profile()
form = TestForm(instance=profile)
if request.method == "POST":
form = TestForm(request.POST, request.FILES, instance=profile)
if form.is_valid():
form.save()
return render(request, 'test.html', {'form':form})
模板:
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit" />
</form>
</body>
</html>
的問題:
如果IM1包含一個有效的圖像,我檢查旁邊的清除複選框,但不檢查檢查和提交,fo rm返回一個錯誤,說checkme是必需的。雖然表單返回錯誤,但看起來好像im1已被清除。實際上它並不是因爲如果我重新加載表單im1顯示備份與其文件和清除複選框。
我的問題是我該如何解決這個問題?這是我正在做的事情還是這個與Django有關?
感謝您的幫助,我會嘗試一些出來,它看起來很有前途。我讓用戶做了兩次完全相同的操作,因爲這是一個簡化的測試用例。在真實情況下,圖像是個人資料圖片,並且一個人必須檢查一個框,表示他們承認圖片將在網站上公開。另一種產生相同結果的場景是,如果您沒有檢查框,但是請檢查im1並給im2一個非圖像。表單返回im2錯誤,im1看起來好像已被清除。這就是我想要避免的,如果不是的話,im1或2看起來會被清除。 – joshcartme
我想我明白你現在說的話。您需要記住您可以查看request.POST和request.FILES字典的內容。你可以檢查是否選中了「清除」,如果是,你可以手動刪除圖像,這樣如果他們有表單錯誤並刷新頁面,它確實永遠消失了,而不是再次出現。 –