2012-04-08 8 views
1

にフォームフィールドに記入するにはどうすれば4つの分野でのModelForm持っている:メッセージ、著者、部屋やタイムスタンプを。タイムスタンプはauto_nowに設定されているため、フォームには表示されません。 AuthorとRoomはどちらもForeignkeであり、自動的にフォームに記入したいと思っています。作者はrequest.userに設定されていて、その部屋はurlで表示されます:/ add_message/{{room.id}}/'私はクライアントがメッセージを記入したいだけのフィールドです。ここではビューはこれまでのところだが、私はこれを達成する方法がわからないです:自動的ジャンゴ

@login_required(login_url="/login/") 
def add_message(request, room_id): 
    p = get_object_or_404(Room, pk=room_id) 
    m = Message.objects.all().order_by('-timestamp') 
    form = MessageForm(request.POST or None) 
    if form.is_valid(): 
     cmodel = form.save() 
     cmodel.save() 
    return HttpResponseRedirect(reverse('chat.views.add_message', args=(p.id,))) 

return render_to_response('chatroom.html', {'contact_form': form, 'room':p, 'latest_message_list': m}, context_instance=RequestContext(request)) 
+0

フォームまたはビューでは? –

+0

私は、フォームにクライアントによって入力されたメッセージを、ビューに定義されているユーザーとルームと共に掲示したいと思います。それぞれrequest.userとroom.id。 –

答えて

1

はテストしていないが、

forms.py

class MessageForm(forms.ModelForm): 
    def __init__(self, **kwargs): 
     self.room = kwargs.pop('room', None) 
     self.author = kwargs.pop('author', None) 
     super(MessageForm, self).__init__(**kwargs) 

    def save(self, commit=True): 
     obj = super(MessageForm, self).save(commit=False) 
     obj.room = self.room 
     obj.author = self.author 
     if commit: 
      obj.save() 
     return obj 

    class Meta: 
     model = Message 

views.pyに動作するはずです

@login_required(login_url="/login/") 
def add_message(request, room_id): 
    room = get_object_or_404(Room, pk=room_id) 
    form = MessageForm(room=room, author=request.user, data=request.POST) 
    if form.is_valid(): 
     form.save() 
    return HttpResponseRedirect(reverse('chat.views.add_message', args=(p.id,))) 
+0

それが仕事をするかのようにそれは確かに見えます、しかし、私はちょうどそれをテストして述べNameErrorを上げてきました:のModelFormがあります:名「フォーム」が定義されていない、私は、ただのModelFormと、それはその後、訴えするforms.ModelFormを変更しましたモデルクラスは指定されていません。それ以外は、これがクリアされると、私は後になっているように見えます。 –

+0

'from django import forms' – San4ez

+0

それを試しても、まだ動作しません。 –