2016-07-26 42 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