我之前發佈過關於這個問題的文章,但是我仍然沒有找到解決方案,所以我希望這次能有更好的運氣。Django覆蓋表單數據保存
我有一個表單,用戶輸入的數據。在另一個頁面中,我創建了用戶已填充的相同表單(預填充了該信息)以進行編輯。用戶會來到這個頁面來編輯他們已經放入的信息。我的問題是它不覆蓋實例。
def edit(request):
a = request.session.get('a', None)
if a is None:
raise Http404('a was not found')
if request.method == 'POST':
form = Name_Form(request.POST, instance=a)
if form.is_valid():
j = form.save(commit=False)
j.save()
else:
form = Name_Form(instance = a)
對於這種形式,我使用了一些值「unique_together」。我也在調用模板中的{{form.non_field_errors}}。
當我在編輯視圖中進行更改時,如果字段更改涉及「unique_together」中定義的那些字段,則返回錯誤告訴我該實例已存在。否則它會保存一個新的實例。這不是重寫。
請注意,我使用unique_together的原因是,我想阻止用戶最初輸入兩次相同的表單(在編輯階段之前,在初始輸入視圖中)。
任何想法?
編輯:請注意「a」是指包含所有可用實例的下拉框的會話。結轉後將指示用戶想要編輯哪個實例。 `
在以前的觀點,你有沒有保存「a」到數據庫中,你將它添加到會話之前?如果你打印一個.id(我懷疑它可能是'None'),會發生什麼? – Alasdair 2012-02-20 20:10:15
是的,它們被保存到數據庫..當我打印它時,實際上給了我ID ..不僅如此,而且它成功預先填寫a的所有字段的形式,所以它肯定會將其結束。 – JohnnyCash 2012-02-20 20:35:04
「a」引用另一個視圖中的下拉框,用戶將選擇該下拉框來指示他們想要編輯的實例 – JohnnyCash 2012-02-20 20:36:45