3

我是 django 的新手,并且一直在尝试将 User 对象传递给 ModelForm,然后对其进行验证。也就是最后将 User 对象作为 ForeignKey 添加到 Note 对象中,其中 ModelForm 是 Note 类的 Meta。

我的forms.py:

  class NoteForm(ModelForm):
     class Meta:
        model = Note

我的意见.py:

  def addNote(request):
     if request.method == 'POST':
        user = User.objects.get(username=request.POST['user'])
        model_form = NoteForm(request.POST, request.FILES, user)
        if model_form.is_valid():
           model_form.save()
           return HttpResponseRedirect(reverse('index'))
        return HttpResponse('De indtastede data er ikke gyldige')
     return render(request, 'studies/uploadfile.html')

我的模板.html:

<form enctype="multipart/form-data" method="post" action="/notes/add/">
Note Title: <input type="text" name="name"  /> <br />
Select Note: <input type="file" name="note" /> <br /> 
<input type="hidden" name="user" value="{{ user.id }}">
<input type="submit" value="submit" />
{% csrf_token %}
</form>

我尝试使用 request.user,因为我试图让当前用户登录并将该用户添加为 ForreignKey。任何帮助将不胜感激,在此先感谢。

4

3 回答 3

8

我不确定要将其发送到模板有什么意义。毕竟,您在验证之前和之后都可以在视图中看到它:最好在那里处理它。

要做的是user从表单定义中排除该字段,然后在保存时手动设置:

class NoteForm(ModelForm):
   class Meta:
      model = Note
      exclude = ('user',)


if request.method == 'POST':
   model_form = NoteForm(request.POST, request.FILES)
   if model_form.is_valid():
       note = model_form.save(commit=True)
       note.user = request.user
       note.save()
       return...

另请注意,您的视图永远不会向模板发送任何验证错误,并且您的模板不会显示错误或用户输入的无效值。请遵循文档中规定的结构。

于 2012-10-12T09:52:08.050 回答
2

您可以扩展表单的保存方法,

def save(self, user):
    note = super(NoteForm, self)
    note.user = user
    note.save()
    return note

此外,您的视图必须采用以下结构:

from django.shortcuts import render
from django.http import HttpResponseRedirect

def contact(request):
     if request.method == 'POST': # If the form has been submitted...
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            # note: NoteForm.save(request.user)
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render(request, 'contact.html', {
        'form': form,
    })

(从https://docs.djangoproject.com/en/dev/topics/forms/复制)

于 2012-10-12T16:09:33.830 回答
0

看这里https://docs.djangoproject.com/en/1.2/ref/templates/api/#subclassing-context-requestcontext

于 2012-10-12T09:37:52.873 回答