私は個人間で1対1のチャットを作成していますが、最後に送信されたメッセージを表示したいのですが、問題は、すべてのルームの最後のメッセージをテンプレートにループするときに、沢山あります。ここでループの値をビューからテンプレートにレンダリングするにはどうすればよいですか?
は私views.pyに持っているものです:
def my_rooms(request, username):
user = User.objects.get(username=username)
room_user = Room.objects.all()
print('----------------------------------------')
for room in room_user:
rooms = room.messages.all()[:1]
print(rooms)
return render(request, "my_room.html", {
'rooms': rooms,
})
プリント(部屋)、(それぞれの記事は、独自のプライベートチャットルームを持っている):
-------------------------------
[]
[<Message: 02-02-2017 09:50AM, user01 to user02 : hey>] #room1
[]
[<Message: 02-02-2017 10:52AM, user01 to user02 : Fine and you ?>] #room2
my_room.html
{% for room in rooms %}
<p>{{ room.client }} : {{ room.message }}</p>
<p>{{ room.timestamp }}</p>
{% endfor %}
テンプレートではどうなりますか?
私はちょうど得る:
[<Message: 02-02-2017 10:52AM, user01 to user02 : Fine and you ?>] #room2
の公表件のデータはありませんので、
[<Message: 02-02-2017 09:50AM, user01 to user02 : hey>] #room1
なぜ?どのように関係する部屋のすべてのデータを表示できますか?
------ ------ UPDATE
私が解決しようとしている問題は、私は私のテンプレートにするループからの戻り値を欲しいということです。私はちょうど1つの結果しか表示されていないと私のテンプレートのすべてのfor
ループされた結果を表示している理由は理解できませんか?は少し明確にそれを助けるかもしれない
models.py:あなたのviews.pyコードの流れを見てみると
class Room(models.Model):
gig = models.ForeignKey(Gig, null=True)
creator = models.ForeignKey(User)
...
class Message(models.Model):
client = models.ForeignKey(User, related_name='client', null=True)
seller = models.ForeignKey(User, related_name='seller', null=True)
room = models.ForeignKey(Room, related_name='messages', null=True)
message = models.TextField(max_length=500)
timestamp = models.DateTimeField(default=timezone.now, db_index=True)
...
あなたが解決しようとしている問題は何ですか?あなたのコード私は非常に明確ではないと恐れているすべての部屋をループし、各部屋のためのさらなるクエリを行って、それはひざまずいてあなたのデータベースをもたらすだろうhttp://meta.stackexchange.com/questions/66377/what- is-the-xy-problem – e4c5
@ e4c5ヒントをお寄せいただきありがとうございます。私は次の記事のために更新し、もっと明確にしようとしています。私は試してみると 'for'ループを通して複数のオブジェクトをテンプレートにレンダリングしたい上のサンプルコードのように、 'for'ループの最後のオブジェクトをレンダリングするだけです。 – Lindow
forループの各反復で 'rooms'を再定義しているので、最後の反復の結果のみを含めることができます。おそらくそれらをリストに追加する必要があります。 –