2012-10-12 81 views
3

我是django的新手,並且已經綁定將User對象傳遞給ModelForm,然後驗證它。最後,將User對象作爲ForeignKey添加到Note對象,其中ModelForm是類Note的Meta。Django - 如何將用戶對象傳遞到views.py中的表單

我forms.py:

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

我views.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') 

我template.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。 任何幫助將不勝感激,事先感謝。這裏https://docs.djangoproject.com/en/1.2/ref/templates/api/#subclassing-context-requestcontext

+0

如果你想在當前登錄用戶在你的模板中,你可以使用'request.user'嗎?使用它有什麼問題? – arulmr

+0

你可以,但是當我將用戶添加到我的ModelForm時,它不會驗證。 –

回答

7

+0

我不想將任何內容發送到模板,而是從模板發送到視圖。在哪裏我想添加一個新的筆記對象。嘗試更正仍然會導致它在model_form.is_valid()失敗,並且我得到「返回HttpResponse('De indtastede data er ikke gyldige')」「執行。 –

+0

沒關係!有效!非常感謝你! –

+0

@AndersBækvang如果它適合你,那麼接受答案,這樣對別人會有幫助。 – arulmr

0

看我不知道該點是想將其發送到模板的東西。畢竟,在驗證之前和驗證之後,您都可以在視圖中看到它:更好地在那裏處理它。

要做的事情是從表單定義排除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... 

另外請注意,您的觀點永遠不會發送任何驗證錯誤的模板,模板不顯示錯誤或用戶輸入的無效值。請遵循文檔中列出的結構。

+0

我的問題是,表單將無法驗證,當我給它用戶對象出於某種原因。 –

1

可以延長保存表單的方法,

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/複製)

相關問題