繁体   English   中英

Django:将URL请求参数保存到表单中

[英]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

在您的模型中, PatientidPatient 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM