我有一个视图,它有一个简单的"保存并添加另一个";功能,在提交表单后将用户重定向到同一页面。
视图:
def new_planning(request):
form = PlanningForm(request.POST)
if form.is_valid():
form.save()
if 'another' in request.POST:
messages.success(request, ('Success!'))
return redirect('new_planning')
else:
return redirect('list_planning')
return render(request, 'pages/planning/new_planning.html', context={
'form': form,
})
表单:
class PlanningForm(forms.ModelForm):
accountplan = ModelChoiceField(
queryset=AccountsPlan.objects.filter(active=True).order_by('code'),
)
month = forms.DateField(
required=True,
error_messages={'required': '', },
)
amount = forms.DecimalField(
max_digits=9,
decimal_places=2,
required=True,
validators=[
error_messages={'required': '', },
)
class Meta:
model = Planning
fields = '__all__'
该功能按预期工作,提交后,同一页面将呈现为一个空白表单。我想要的是只保留"金额">字段为空,并保持在"em>"字段中键入的数据;会计计划和";月份字段。有办法做到这一点吗?
我在文档中读到了关于实例的信息,但这似乎不是我想要的,因为我不想从数据库中获取数据(如果可能的话(,只是简单地在两个字段中都键入最后的输入。
如果您重写;ModelForm";至";型号";类,您可以获得发布数据的值,并可以呈现到页面上
例如:
# views.py
def ContactPageView(request):
if request.method == "POST":
email = request.POST.get('email')
message = request.POST.get('message')
message_element = ContactFormObject(email=email, message=message)
message_element.save()
else:
name, message = '', ''
form_data = name, message
return render(request, 'contact.html', {'form_data': form_data})
# models.py
class ContactFormObject(models.Model):
email = models.CharField(max_length=100) #....
ModelForm更舒适,但如果你有额外的10分钟来编写一些HTML代码,以便进行更多的自定义,我不建议你这样做。