【问题标题】:Editing a Row using Django Forms使用 Django 表单编辑行
【发布时间】:2016-07-26 06:41:54
【问题描述】:

我想在 Django 1.9 中使用 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 必须是唯一的,但我只是在更新它。有没有办法覆盖这个验证?

顺便说一句,该领域确实需要一对一。

【问题讨论】:

  • 是的,只是一个错字。 :) 但问题仍然是一样的。 :)
  • 这可能会对您有所帮助。切换到外键stackoverflow.com/questions/20909039/…
  • 谢谢@user2853437。但问题是它确实需要一对一,我只需要编辑它。
  • 发布您的完整视图
  • ……还有模型和表格!

标签: python django django-models django-forms


【解决方案1】:

这点做错了

form_instance = MyForm(initial=myModel.__dict__)

应该是

form_instance = MyForm(instance=myModel)

糟糕,忘了补充,为了处理表单验证失败的情况,你的 post 方法可能需要这样的东西:

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

您需要再次获取该实例。作为旁注,您的代码可以通过将您的两个函数合并为一个并在其中添加 if else 来大大简化

if request.method == 'POST':

else:

【讨论】:

  • 你是救生员。 :) 谢谢。
  • 很高兴能帮上忙
  • 只是一个注释。还需要将 form_instance = MyForm(request.POST) 改为 form_instance = MyForm(request.POST, instance=MyModel)
猜你喜欢
  • 2015-02-24
  • 2018-12-03
  • 1970-01-01
  • 2018-10-06
  • 2020-01-28
  • 1970-01-01
  • 2018-10-05
  • 2016-10-23
  • 2010-12-29
相关资源
最近更新 更多