質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Q&A

解決済

1回答

1868閲覧

Djangoにおけるget_object_or_404で取得したデータが<QuerySet []>で空になっている。

daisukezr

総合スコア13

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

0グッド

0クリップ

投稿2020/11/20 07:10

編集2020/11/20 07:19

models

1 2from django.db import models 3from django.contrib.auth import get_user_model 4# Create your models here. 5User = get_user_model() 6 7#This is for making friends 8class Contact(models.Model): 9 user = models.ForeignKey(User, related_name='friend', on_delete=models.CASCADE) 10 friends = models.ManyToManyField('self', blank=True) 11 12 13 def __str__(self): 14 return self.user.name 15 16 17#This is for new Messages 18class Message(models.Model): 19 contact = models.ForeignKey(Contact, related_name='message', on_delete=models.CASCADE) 20 content = models.TextField() 21 timestamp = models.DateTimeField(auto_now=True) 22 23 def __str__(self): 24 return self.contact.user.name 25 26 27#This is for fetching messages 28class Chat(models.Model): 29 participants = models.ManyToManyField(Contact, related_name='chats') 30 messages = models.ManyToManyField(Message, blank=True) 31 32 33 def last_30_messages(self): 34 return self.messages.objects.order_by('-timestamp').all()[:30] 35 36 37 def __str__(self): 38 return "{}".format(self.pk)

views

1 2from django.shortcuts import render, get_object_or_404 3from .models import * 4 5def get_last_30_messages(ChatID): 6 print('ChatID::', ChatID) 7 chat = get_object_or_404(Chat, id=ChatID) 8  #この時点ではprint(chat) => 1 で pkがちゃんと返ってくる 9 return chat.messages.order_by('-timestamp').all()[:30] 10 #chat.messages.order_by('-timestamp').all()[:30] が空 11

adminで確認すると、確かにmessagesはある。
イメージ説明

Messagesのところを開いて確認しても確かにある。中身を確認してもちゃんとcontent, name, timestampはいずれのmessageにありました。
イメージ説明

ちなみに同じChatIDで

views

1from django.shortcuts import render, get_object_or_404 2from .models import * 3 4def get_last_30_messages(ChatID): 5 print('ChatID::', ChatID) 6 chat = get_object_or_404(Chat, id=ChatID) 7 return chat.participants.order_by('-timestamp').all()[:30] 8#messages => participants

とするとちゃんとparticipantsは返ってくるのですが、messagesにした途端、空のquerysetが返ってきます。

写真にあるmessagesをfetchしたいのですが、何かこのようなことが起こる原因があるのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ManytoManyFieldsの仕組みを理解してませんでした。createでMessage作るだけじゃなくて、Chatに追加していく過程が必要でした。

consumers

1current_chat = get_object_or_404(Chat, id=1) 2current_chat.messages.add(message) 3current_chat.save()

投稿2020/11/20 14:48

daisukezr

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問