我有一个包含四个字段的模型:消息,作者,房间和时间戳。 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))
答案 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,)))