django - 在 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 中没有记录任何消息对象,我也没有收到任何错误。谁能解释为什么我的数据没有被传递到表格?还是这里有另一个错误?
解决方案
我需要将 DetailView 更改为 CreateView 并且现在可以使用
推荐阅读
- javascript - 为什么我的 Async 方法没有从另一个屏幕上使用 react native 中的功能组件调用?
- css - 在反应应用程序中包含样式表文件时出现问题
- typescript - react-admin typescript:不能使用命名空间作为类型
- java - 没有这样的列 SQLite Android
- r - ggplot时间序列间隔堆积条
- docusignapi - Docusign 嵌入式签名 - 我可以提供不同的返回 URL 以在会话过期时显示吗?
- r - 每个运行并行代码的并行实例?
- microsoft-teams - 将 Microsoft Teams 频道对话嵌入网站
- sql - 使用 Oracle 如何根据两个不同的 if 语句有条件地从两个不同的表中选择一列?
- java - 在 Web 中使用 ACE Editor for Java Language