2016-07-26 38 views
1

我想在Django編輯行1.9使用Django形式:編輯使用Django連續窗體

所以我所做的就是

對於GET請求我初始化形式實例(views.py)

def get(self, request): 
    myModel = model.myModel.objects.get(user=request.user) 
    form_instance = MyForm(initial=myModel.__dict__) 
    return render(request, 'mytemplate.html', {'form': form_instance}) 

def post(self, request): 
    form_instance = MyForm(request.POST) 
    if form_instance.is_valid(): 
     form_instance.save() 
     return redirect('..') 
    return render(request, 'mytemplate.html', {'form': form_instance}) 

這是我的models.py

class MyModel(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    Booth = models.OneToOneField(BoothLocation) 
class BoothLocation(models.Model): 
    LocationID = models.CharField(max_length = 25) 

,我有一個forms.py

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ('Booth') 
     labels = {'Booth':_('Booth Chosen')} 

我的問題是,我的模型有一個一對一的領域,因此,每當我執行

form_instance = MyForm(request.POST) 

它會返回一個錯誤,指出onetoonefield必須是唯一的,但我只是更新它。有沒有辦法來重寫這個驗證?

順便說一句,該領域真的需要一對一。

+0

是的,它只是一個錯字。 :)但問題依然如此。 :) – Red

+0

這可能會幫助你。切換到ForeignKey http://stackoverflow.com/questions/20909039/does-django-onetoonefield-needs-to-be-unique – user2853437

+0

謝謝@ user2853437。但問題是它確實需要一對一,我只需要編輯它。 – Red

回答

0

這樣做有點不對勁

form_instance = MyForm(initial=myModel.__dict__) 

應該

form_instance = MyForm(instance=myModel) 

哎呀,忘了補充,以處理在表單驗證失敗的情況下,您的文章meethod可能需要這樣的東西這個:

form_instance = MyForm(request.POST, instance=myModel) 

你需要再次獲取實例。作爲一個方面說明,你的代碼可以通過將你的兩個功能合併爲一個,並在其中添加內容來大大簡化。

if request.method == 'POST': 

else: 
+0

你是一個救星。 :) 謝謝。 – Red

+0

很高興有幫助 – e4c5

+0

只是一個說明。還需要將 form_instance = MyForm(request.POST)更改爲 form_instance = MyForm(request.POST,instance = MyModel) – Red