如何从模板提交django ModelForm

How to submit django ModelForm from template

我正在尝试创建

的实例
class Message(models.Model):
    text        = models.TextField()
    created     = models.DateTimeField(auto_now_add=True)
    sender      = models.ForeignKey(User, related_name='messages_sent')
    receiver    = models.ForeignKey(User, related_name='messages_received')

当用户尝试向其他用户发送消息时。我有一个表格

<form action="{% url 'chat:submit_message' viewed_user.username %}" method="post">
{% csrf_token %}
    <input type="text" name="message" id="message" value="" />
    <label for="message">Enter your message here</label><br />
<input type="submit" value="Send" />
</form>

并且"sender"存储在'request.user'中,"receiver"在

中作为'username'携带
url(r'^message/(?P<username>\w+)/$',        views.message

我试过了

def send_message(request, username):
    """Add a new comment."""
    # p = request.POST
    print request
    message = Message()
    m = request.POST
    mf = MessageForm(m, instance=message)    
    text    = request.POST['message']
    sender  = User.objects.get(username=username)
    receiver= request.user
    mf.fields["text"] = text
    mf.fields["sender"] = sender
    mf.fields["receiver"] = receiver
    mf.save()

并收到

的投诉
`AttributeError at /chat/message/[username]/submit/
'unicode' object has no attribute 'widget'`

提交表单后如何创建消息?

下面是可用的代码:

from django import forms
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect

class MessageForm(forms.ModelForm):
    class Meta:
        model = Message
        fields = ['text']

@login_required
def send_message(request, username):
    if request.method == 'POST':
        message = Message(sender=request.user,
                          receiver=get_object_or_404(User, username=username))
        form = MessageForm(request.POST, instance=message)
        if form.is_valid():
            form.save()
        else:
            # handle the invalid form here if you want
    return redirect('some-view')

请注意,字段名称是 text 而不是 message,因此您需要使用有效的字段名称更新 html 表单。