簡體   English   中英

Django模型查詢

[英]Django models query

我有一個類似的Django模型

messageto:
messagefrom:
信息:

問題是當我必須在兩個特定用戶之間顯示消息時,我必須遍歷數據庫中存儲的所有消息,並檢查messageto和messagefrom字段。

我使用django的方式就像每個模型都代表一個表,並且對應於模型類的每個對象,我們在數據庫中都有一行。

因此,根據這種邏輯,我認為不可能為每個messageto和messagefrom組合使用單獨的表,因為我們需要為它們中的每個聲明一個單獨的類。

有沒有一種方法可以查找用戶之間的消息而無需遍歷每條消息?

我正在尋找使用相同實現或新實現的任何方式都可以。

請幫忙。

一種方法是使用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 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM