Django模型查询

Django models query

我有一个类似的 django 模型

留言给:
消息来自:
消息:

当我必须显示两个特定用户之间的消息时,我必须遍历存储在数据库中的所有消息并检查 messageto 和 messagefrom 字段。

我使用 django 的方式就像每个模型代表一个 table,对应于模型的每个对象 class 我们在数据库中有一行。

所以根据这个逻辑,我认为每个 messageto 和 messagefrom 组合都有一个单独的 table 是不可能的,因为我们需要为每个组合声明一个单独的 class。

有没有一种方法可以在不查看每条消息的情况下找到用户之间的消息?

我正在寻找具有相同实现或新实现的某种方式,任何一种都可以。

请帮忙。

一种方法是使用 Q 对象来解决该问题。如果您的模型名为 Message,您可以使用以下查询在两个用户 A 和 B 之间交换所有消息:

Message.objects.filter(Q(messageto=A, messagefrom=B)|Q(messageto=B, messagefrom=A))

有关 Q 对象的更多详细信息,请参阅 https://docs.djangoproject.com/en/1.10/topics/db/queries/#complex-lookups-with-q-objects

数据库不会遍历所有内容。它使记录保持索引。

你可以为用户创建一个模型(如果没有,django 会提供一个默认的用户模型)。

class Users(models.Model):
    # all the fields you want for a user(username, password, email,etc..)
    message_exchanged=models.ManyToManyField(Messages,through='MessageMap',through_fields=('messagefrom','message'))

那么你可以有一个class来存储消息。

class Messages(models.Model):
    message_text=models.TextField()
    #other fields you want to add for a message

这里有你的 MessageMap 模型

class MessageMap(models.Model):
messagefrom=models.ForeignKey(Users)
message=models.ForeignKey(Message)
messageto=models.ForeignKey(User,related_name='next_messsage',null=True,blank=True)

一旦您存储了消息。您可以使用

查询消息
messages=Message.objects.filter(Q(messagefrom = from_user),Q(messageto=to_user))