首页 > 解决方案 > 在 Django 中从用户到用户发送简单的消息

问题描述

我正在尝试创建一个简单的表单,允许用户在 Django 中相互发送消息。我的模型如下所示:

class Message(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='messages_to')
    sender = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='messages_from')
    message = models.TextField(blank=True)
    unread = models.BooleanField(default=True)

我的表格如下所示:

class MessageForm(forms.ModelForm):
    class Meta:
        model = Message
        fields = ('message',)

我想在收件人个人资料页面上显示表格。我想我需要在 url 中包含发件人 id 以便 django 知道消息来自哪里,所以我用这个 url 链接到收件人页面:

path('profile/<int:user_id>/<int:sender_id>', ProfileDetailView.as_view(), name='profile_detail')

最后,这是我的视图,它呈现用户个人资料页面和发送消息的表单:

class ProfileDetailView(FormMixin, DetailView):
    model = Profile
    template_name = 'users/detail.html'
    form_class = MessageForm

    def get_object(self):
        profile = Profile.objects.get(pk=self.kwargs['user_id'])
        return profile

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.user = Profile.objects.get(pk=self.kwargs['user_id'])
        instance.sender = Profile.objects.get(id=self.kwargs['sender_id'])
        instance.save()
        return super(ProfileDetailView, self).form_valid(form)

    def get_success_url(self):
        return reverse('/')

当前页面和表单正在正确呈现,但是当我在表单中输入消息并单击发送时,页面只会刷新并变为空白。django-admin 中没有记录任何消息对象,我也没有收到任何错误。谁能解释为什么我的数据没有被传递到表格?还是这里有另一个错误?

标签: djangodjango-formsmessage

解决方案


我需要将 DetailView 更改为 CreateView 并且现在可以使用


推荐阅读