2017-01-05 50 views
1

我使用窗体将数据保存到它。Django的:保存URL请求参数到表单

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') 

我传递的参数患者ID从URL。

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 

这给了我一个错误

[微软] [SQL Server本机客户端11.0] [SQL Server]不能插入 NULL值插入列 'patientid'

Django 1.10.4 
Python 3.5.2 
Windows 7 
+1

这个问题有很多错误。你的模型在哪里?什么是缩进。什么是似乎未定义的presciptiontemplates? – e4c5

+0

显示prescription.html并告诉我们什么是** presciptiontemplates **? –

+0

新增的ModelForm,presciptiontemplates是我打算从富文本编辑器 –

回答

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}) 
+0

它给了我一个错误 int()参数必须是字符串,类似字节的对象或数字,而不是'患者' 任何建议 –

+0

@ RomilBahukhandi错误是在哪个代码行? –

+0

@RomilBahukhandi更新我的答案。尝试** form.patientid = patid **代替患者对象。 –

0

要添加的用户ID值到新的对象,你可以使用的ModelForm。

只是要来自继承的ModelForm不Form类templateform。

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() 
2

假设templateform是一个模型的形式。

您可以在保存方法使用commit=False参数,然后用所需的参数再保存对象。

一小段改变按你的代码

... 
if request.method == "POST": 
    if form.is_valid(): 
     obj = form.save(commit=False) 
     obj.patientid = userid 
     obj.save() 
    return redirect('index') 
else: 
...