[英]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.