Djangoでアプリを作っているのですが
投稿に対して投稿主にメッセージを送れるような
一種のチャットルームを作っています。(イメージとしては 「ヤフオクの出品者へ質問ボタン」 に近いような感じです。)
しかし、チャットルーム画面でメッセージを送信すると次のエラーが発生しました。
おそらくViews.pyの
python
1 def post(self, request, **kwargs): 2 message_room = MessageRoom.objects.filter(id=self.kwargs['pk'], 3 inquiry_user_id=self.request.user.id) 4 form = MessageForm(request.POST) 5 if form.is_valid(): 6 form.message_room_id = self.kwargs['pk'] 7 form.save() 8 else: 9 print(form.errors) 10 return redirect('hogehoge:message_room', pk=message_room[0].id)
の部分が問題になっているのかなと思っているのですが
print(form.message_room_id)をform.save()の前に挿入してみると、ターミナルに1と表示されるので
message_room_idはNUllではない気がしているのですが
何が原因でこのようなエラーがでているのか、わかりません。
models.py
class MessageRoom(models.Model): post = models.ForeignKey(Post, verbose_name='MessageRoom Post', on_delete=models.CASCADE) inquiry_user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, null=False, related_name='inquiry_user') def __str__(self): return str(self.id) class Message(models.Model): message = models.CharField(max_length=100) message_room = models.ForeignKey(MessageRoom, verbose_name='Message', on_delete=models.CASCADE) def __str__(self): return str(self.id)
Views.py
class MessageRoomView(LoginRequiredMixin, DetailView): template_name = 'hogehoge/hoge/message_room.html' model = MessageRoom form_class = MessageForm context_object_name = 'message_room' success_url = reverse_lazy('hoge:message_room') def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) message_list = Message.objects.all() context['form'] = MessageForm for message in message_list: return context def post(self, request, **kwargs): message_room = MessageRoom.objects.filter(id=self.kwargs['pk'], inquiry_user_id=self.request.user.id) form = MessageForm(request.POST) if form.is_valid(): form.message_room_id = self.kwargs['pk'] form.save() else: print(form.errors) return redirect('hogehoge:message_room', pk=message_room[0].id)
forms.py
class MessageForm(forms.ModelForm): message = forms.CharField(label='message', required=True) class Meta: model = Message fields = [ 'message', ]
message_room.html
<form action="{% url 'hogehoge:message_room' message_room.id %}" method="POST"> {% csrf_token %} {{ form.errors }} <div class="send-msg"> {{ form.message }} <button class="btn btn-warning" type="submit">Send</button> </div> </form>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。