2014-07-07 66 views
0

我讀了ForeignKey的文檔,它說外鍵給出了多對一的關係。如何概念化Django的ForeignKey?

我做了這個例子說,每個聊天室可以有多個消息:

class Message(models.Model): 
    message=models.CharField(max_length=30) 

class ChatRoom(models.Model): 
    message=models.ForeignKey(Message) 

這個代碼是否做到這一點?如果不是這樣,我想正確的答案應該是這個

class ChatRoom(models.Model): 
    room_name=models.CharField(max_length=30) 

class Message(models.Model): 
    message=models.CharField(max_length=30) 
    room=models.ForeignKey(ChatRoom) 

在任何情況下,我將如何去在聊天室裏,顯示所有的消息?

回答

2

這是你的目的正確的模型聲明(第二個):

class ChatRoom(models.Model): 
    room_name=models.CharField(max_length=30) 

class Message(models.Model): 
    message=models.CharField(max_length=30) 
    room=models.ForeignKey(ChatRoom) 

這意味着有與單個聊天室(一個)多個消息(很多)。

要顯示所有郵件,你這樣做:

messages = chat_room.message_set.values('message') 

其中chat_room是ChatRoom模型

或者實例,你可以做一個相關的名稱:

class Message(models.Model): 
    message=models.CharField(max_length=30) 
    room=models.ForeignKey(ChatRoom, related_name='messages') 

,然後,做

messages = chat_room.messages.values('message') 

實際採取的所有郵件,或

messages = chat_room.messages.all()

採取的所有對象(不只是消息)

1
class ChatRoom(models.Model): 
    room_name=models.CharField(max_length=30) 

class Message(models.Model): 
    message=models.CharField(max_length=30) 
    room=models.ForeignKey(ChatRoom) 

用於顯示聊天室使用的所有消息:

chatroomobject.message_set.all() in backend views/scripts 
chatroomobject.message_set.all in templates 

這裏:

chatroomobject is the instance object of the ChatRoom Model