2011-10-31 34 views
0

对于以下unread定义,如何让当前用户能够计算给定用户拥有的MessageThread的数量?如何获取模型字段的当前用户

class MessageThread(models.Model): 
    subject = models.CharField(max_length=256, blank=False) 

    def unread(self): 
     return self.objects.filter(***messagerecipient__recipient='current user'***).distinct().count() 

class MessageRecipient(models.Model): 
    message = models.ForeignKey(Message) 
    recipient = models.ForeignKey(User) 
    status = models.CharField(max_length=20, choices=MESSAGE_STATUS, default="unread") 
+0

'unread()'应该是管理器上的方法,而不是模型。 –

回答

1

你必须将请求传递给方法:

def unread(self, request): 
    return self.objects.filter(messagerecipient__recipient=request.user).distinct().count() 

但要调用模型方法(在特定行操作,即单一MessageThread这没有意义) - 你应该写一个模型管理器所以现在对整个表进行操作(即在表中找到MessageThread所有未读线程)

class MessageThreadManager(models.Manager): 
    def get_unread_threads(self, user): 
     return self.objects.filter(messagerecipient__recipient=user).distinct() 

class MessageThread(models.Model): 
    objects = MessageThreadManager() 

您可以拨打:

unread_threads = MessageThread.objects.get_unread_threads(some_user_obj)