如何在django中自动填写表单字段

时间:2012-04-08 15:41:05

标签: django forms modelform

我有一个包含四个字段的模型:消息,作者,房间和时间戳。 timestamp设置为auto_now,因此不会出现在表单中。作者和房间都是外国钥匙,我希望它们自动填写表格,作者被设置为request.user,并且通过网址传递给房间查看:/ 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))

1 个答案:

答案 0 :(得分: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,)))