我使用表单将数据保存到其中。
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})
forms.py
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&#39; patientid&#39;
Django 1.10.4
Python 3.5.2
Windows 7
答案 0 :(得分:2)
假设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:
...
答案 1 :(得分:2)
问题出在这一行:
presciptiontemplates.patientid = userid
在您的模型中, patientid 是患者模型的外键,因此它需要患者模型对象,而不是患者的身份 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})
答案 2 :(得分:0)
要将userid值添加到新对象中,可以使用ModelForm。
只需将模板形式从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()