Django-更新模型表单的某些字段
型号: 表格: 测试:Django-更新模型表单的某些字段,django,django-forms,Django,Django Forms,型号: 表格: 测试: class SessionForm(forms.ModelForm): class Meta: model = Session exclude = ['tutor'] 尝试仅发布以下两个字段: <form action="fhjsdhkl" method="POST">{{ csrf_token }} <input name="start_time" /> <input name="end_time" />
class SessionForm(forms.ModelForm):
class Meta:
model = Session
exclude = ['tutor']
尝试仅发布以下两个字段:
<form action="fhjsdhkl" method="POST">{{ csrf_token }}
<input name="start_time" />
<input name="end_time" />
</form>
无法更改会话,因为数据未验证
表单返回的错误为
状态-此字段为必填字段
我需要更新的字段不是固定的,我希望避免每次发布所有字段。我必须为每个案例制作不同的表格吗?编辑2:旧答案不相关
if request.method == 'POST':
form = SessionForm(request.POST)
if request.POST['id']:
try:
s = Session.objects.get(pk=request.POST['id'])
form.instance = s
except Session.DoesNotExist:
pass
if form.is_valid():
form.save()
好的,这里发生了很多事情:
一,
这一行应该是这样的:
if request.method == 'POST':
form = SessionForm(request.POST)
if request.POST['id']:
try:
s = Session.objects.get(pk=request.POST['id'])
form.instance = s
except Session.DoesNotExist:
pass
if form.is_valid():
form.save()
二,
您应该向上移动会话对象:
form = SessionForm(request.POST, instance = s)
如果执行下面的try-and-except方法,则只要该对象不存在,就会引发验证错误。扔一个404代替。文档位于上述快捷方式上:如果尚未导入,则需要导入
现在,您可以对其进行估价并保存:
if request.method == 'POST':
s = get_object_or_404(Session, pk=request.POST['id'])
form = SessionForm(request.POST, instance = s)
三,
此外,您不应该这样做:if request.POST['id']as字符串永远不会为False,即使是空字符串。例如,在空闲状态下尝试以下操作:
if request.method == 'POST':
s = get_object_or_404(Session, pk=request.POST['id'])
form = SessionForm(request.POST, instance = s)
if form.is_valid():
form.save()
您将注意到,该值的计算结果始终为False
因此,您所看到的并不是实际创建参考模型。为什么您需要表单?我举了一个只有一个字段的示例,但实际上我从一个模板中创建了多个字段。您得到了什么验证错误?您确定开始时间和结束时间的格式正确吗?它应该采用相同的格式:2012-04-18 13:00:00如果它不同,比如说,MM-DD-YYYY时间,那么您也会提出验证错误。如果数据库中存在状态,则从该行创建模型时,该状态也将存在。因此,当您执行form=SessionForm(request.POST,instance=ses)时,不会因此而引发验证错误。事实上,如果状态缺失,您应该会收到“这是必填字段”错误。这是数据验证错误。“状态-此字段是必需的”是错误。请看编辑我只在一个字段上给出了一个例子,但我实际上是从一个模板发送了多个(我没有-1)@PierredeLESPINAY我有一个小错误,我已经纠正了。这可能就是我被否定的原因。无论如何,我做了一些编辑。我还更改了我的评论:)@PierredeLESPINAY通常您只需将POST数据用作模型表单的参数,模型表单也将负责验证。您可能希望编辑您的问题以包含此内容。典型的做法是:form=SessionForm(request.POST,instance=ses)。这就是我要做的,但由于我没有发布所有字段,表单没有得到验证,我将更新我的问题。
if request.method == 'POST':
s = get_object_or_404(Session, pk=request.POST['id'])
form = SessionForm(request.POST, instance = s)
if request.method == 'POST':
s = get_object_or_404(Session, pk=request.POST['id'])
form = SessionForm(request.POST, instance = s)
if form.is_valid():
form.save()
>>> '' == True
>>> '' == False
>>> 'a' == True
>>> 'a' == False