message_set 个 Django 模型

message_set of Django model

我是 Django 的新手,在阅读代码时,我不理解 Django 模型(称为 Room)的 message_set 属性:

def room(request, pk):
    room = Room.objects.get(id=pk)
    **room_messages = room.message_set.all()**
    participants = room.participants.all()

部分模特:

class Room(models.Model):
host = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=200)
description = models.TextField(null=True, blank=True)
participants = models.ManyToManyField(
    User, related_name='participants', blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)

class Message(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
body = models.TextField()
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)

如果你定义一个从MessageRoomForeignKey,Django会添加一个从Room模型到其相关[=11]的反向关系=]秒。默认情况下,此关系被命名为 <i>modelname</i>_setmodelname 的起源名称该模型。您可以通过覆盖 related_name=… parameter [Django-doc].

来指定另一个名称

如果您因此反向访问关系,您将获得所有 Message 个对象,其中 room 作为空间,因此 room.message_set.all() 的等效查询是 Message.objects.filter(room=room)