[英]Django: Saving a URL request parameter Into Form
我正在使用表单将数据保存到其中。
models.py
class presciptiontemplates(models.Model):
templateid = models.AutoField(primary_key=True)
template = tinymce_models.HTMLField()
draft = models.BooleanField(default=False)
savedate = models.DateTimeField(default=datetime.now())
patientid = models.ForeignKey('Patient')
我正在从URL传递参数Patient Id。
url(r'^addprescription/(?P<patid>\d+)/$', views.viewtemplate
如何将此参数保存到表单中
views.py
def viewtemplate(request, patid):
userid = patid
form = templateform(request.POST)
if request.method == "POST":
if form.is_valid():
presciptiontemplates.patientid = userid
form.save()
return redirect('index')
else:
form = templateform()
return render(request, 'presapp/prescription.html', {'form': form})
表格
class templateform(forms.ModelForm):
class Meta:
model = presciptiontemplates
fields = ['template', 'draft']
widgets = {
'template': TinyMCE(),
'draft': forms.CheckboxInput()
}
labels = {
"patientid": _("Patient ID"),
}
def __init__(self, *args, **kwargs):
super(ThatForm, self).__init__(*args, **kwargs)
self.fields['template'].required = True
这给我一个错误
[Microsoft] [SQL Server Native Client 11.0] [SQL Server]无法将值NULL插入列“ PatientID”
Django 1.10.4
Python 3.5.2
Windows 7
假设templateform
是模型形式。
您可以在save方法中使用commit=False
参数,然后使用必需的参数再次保存该对象。
简短代码段可根据您的代码进行更改
...
if request.method == "POST":
if form.is_valid():
obj = form.save(commit=False)
obj.patientid = userid
obj.save()
return redirect('index')
else:
...
问题在这一行:
presciptiontemplates.patientid = userid
在您的模型中, Patientid是Patient Model的外键,因此它需要一个Patient模型对象,而不是患者的id为patid 。 因此,首先获取Patient对象,然后将其分配给Patientid,就像这样:
def viewtemplate(request, patid):
patient = Patient.object.get(id=patid)
form = templateform(request.POST)
if request.method == "POST":
if form.is_valid():
form = form.save(commit=False)
form.patientid = patient
form.save()
return redirect('index')
else:
form = templateform()
return render(request, 'presapp/prescription.html', {'form': form})
要将userid值添加到新对象中,可以使用ModelForm。
只是使templateform继承自ModelForm而不是Form类。
class templateform(forms.ModelForm):
class Meta:
model = presciptiontemplates
现在,您可以执行以下操作:
form = templateform(request.POST or None, request.FILES or None)
if form.is_valid():
instance = form.save(commit=False)
instance.patientid = userid
instance.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.