2013-06-23 70 views
0

我想創建一個簡單的郵件收件箱應用程序使用自定義UserModel而不使用插件,因爲它會允許我自由定製它。Django,使用UserModel來創建自定義郵件收件箱問題

我創建了下面的模型,我弄清楚如何向接收者顯示消息,但我無法弄清楚如何創建一個函數來顯示用戶發送的回覆消息。

例如,我給你發了一條消息。您回覆了該消息:如何回覆包括原始消息和所有其他消息的回覆消息,如果答覆繼續進行。

這個例子顯示了我如何讀取用戶發送的單個消息。

車型

class Message(models.Model): 
    user = models.ForeignKey(User) 
    recipient = models.ForeignKey(User) 
    subject = models.CharField(max_length=100) 
    body = models.CharField(max_length=1000) 
    read = models.BooleanField(default=False) 
    trash = models.BooleanField(default=False) 
    sentmessage = models.BooleanField(default=False) 

意見

def Messages(request,id): 
    user = User.objects.get(user=request.user) 
    message = Message.objects.filter(pk=id,user=user) 
    render (request,'message.html'{'message':message}) 

模板

{{message.user}} 
{{message.subject}} 
{{message.body}} 

回答

2

您可以創建一個ForeignKey'self'Message模型可以稱之爲in_response_to。並且,每次有迴應時,創建一個新對象,並將FK字段分配給回覆發送給的消息。您將不得不妥善處理對同一消息的多個響應。

class Message(models.Model): 
    user = models.ForeignKey(User, related_name='sender') 
    recipient = models.ForeignKey(User, related_name='recipient') 
    subject = models.CharField(max_length=100) 
    body = models.CharField(max_length=1000) 
    read = models.BooleanField(default=False) 
    trash = models.BooleanField(default=False) 
    sentmessage = models.BooleanField(default=False) 
    in_response_to = models.ForeignKey('self', null=True, blank=True) 

您可能還需要添加createdupdated時間戳來跟蹤發送的消息的順序。

而且,請注意,您需要在FK一個related_nameUser或Django的將拋出一個錯誤

現在,在檢索的時候,得到了FK對象,直到它爲Noneblank

在最簡單的形式,你可以寫一個模型方法:

class Message(models.Model): 
    #attributes here 

    def get_all_in_reponse_to(self): 
     obj = self.in_response_to 
     response = '' 
     while obj: 
      response += obj.body 
      obj = obj.in_response_to 
     return response. 

一個更簡單的方法是(像你在暗示什麼):

class Message(models.Model): 
    #attributes here 

    def get_all_in_reponse_to(self): 
     response_objects = self.in_response_to.message_set.order_by('-created') 
     for obj in response_object: 
      response += obj.body 
     return response. 

我將讓你找出格式,等這是很簡單的

+0

karthikr,你可以創建一個功能,這樣我就可以更好地理解如何使用in_response_to請karthikr用戶的剖面模型 – JackRoster

+0

related_name?或用戶 – JackRoster

+0

你有一個用戶的外鍵,所以它必須是對用戶的權利? – karthikr