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

Python Django:将URL请求参数保存到表单中,python,django,Python,Django,我正在使用一个表单将数据保存到其中 models.py 我正在从URL传递参数Patient Id url(r'^addprescription/(?P<patid>\d+)/$', views.viewtemplate forms.py class templateform(forms.ModelForm): class Meta: model = presciptiontemplates fields = ['template', 'draft'] wi

我正在使用一个表单将数据保存到其中

models.py

我正在从URL传递参数Patient Id

url(r'^addprescription/(?P<patid>\d+)/$', views.viewtemplate
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本机客户端11.0][SQL Server]无法插入 “patientid”列中的值为NULL


要将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()

要将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()
假设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:
...
假设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是患者模型的外键,因此它需要一个患者模型对象,而不是患者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})

问题出在这一行:

presciptiontemplates.patientid = userid
在您的模型中,patientid是患者模型的外键,因此它需要一个患者模型对象,而不是患者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})


这个问题有很多问题。你的模型在哪里。那压痕呢。什么是PresiptionTemplates,它似乎没有定义?显示prescription.html并告诉我们什么是PresiptionTemplates?添加了modelform,PresiptionTemplates是我打算从富文本编辑器中保存数据的模型,并对错误进行完整的回溯。错误来自forms.py或此行presiptiontemplates.patientid=userid?此错误是由于form.save In views.pylots导致的,原因是该问题存在错误。你的模型在哪里。那压痕呢。什么是PresiptionTemplates,它似乎没有定义?显示prescription.html并告诉我们什么是PresiptionTemplates?添加了modelform,PresiptionTemplates是我打算从富文本编辑器中保存数据的模型,并对错误进行完整的回溯。错误来自forms.py或此行presiptiontemplates.patientid=userid?错误是由于form.save In views.pyIt给我一个错误int参数必须是字符串、类似字节的对象或数字,而不是“Patient”suggestions@RomilBahukhandi错误在代码的哪一行?@RomilBahukhandi正在更新我的答案。请尝试将form.patientid=patid替换为patient对象。错误跟踪为form.save Im使用MSSQL作为后端使用Pyodbc azure,这可能是问题吗?使用这一行还可以form=form.savecommit=False,则错误应该消失。它给我一个error int参数必须是字符串、类似字节的对象或数字,不是“耐心”的suggestions@RomilBahukhandi错误在代码的哪一行?@RomilBahukhandi正在更新我的答案。请尝试将form.patientid=patid替换为patient对象。错误追溯到form.save Im,使用MSSQL作为后端使用Pyodbc azure,这可能是问题所在。使用此行还可以使用form=form.savecommit=False,则错误应该消失。