3

私はdjangoを初めて使用し、UserオブジェクトをModelFormに渡してから検証するようにしています。つまり、最後に User オブジェクトを ForeignKey として Note オブジェクトに追加します。ここで、ModelForm はクラス Note のメタです。

私の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>

現在のユーザーをログオンさせ、そのユーザーをForreignKeyとして追加しようとしているため、request.userを使用してみました。事前に感謝します。

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 に答える