2017-08-24 68 views
0

代码我的工作:Django的筛选查询集反向关系

class Message(models.Model): 
    from_who = models.ForeignKey(User, related_name='sent') 
    to = models.ForeignKey(User, related_name='recieved') 
    text = models.CharField(max_length=1000) 
    timestamp = models.DateTimeField(auto_now_add=True) 
    new = models.BooleanField(default=True) 

我可以在模板只能用新的=真当我使用request.user 显示User.recieved消息背景?如果是,如何?

+0

哪一部分你有问题:使用来自反向关系用户还是向它添加过滤器语句? –

+0

您的意思是,我必须创建一个自定义模板过滤器? – Barburka

+0

您可以这么做,也可以使用自定义管理器或模型方法,但最简单的方法是准备在你的视图代码中的数据并将其传递给上下文 –

回答

1

如果我理解了这个问题 - 您想向登录用户显示所有新消息,而不添加任何额外的上下文到视图?试试这个(请注意,我改变了的“收到”拼写:

{% for message in request.user.received.all %} 

    {% if message.new %} 
     {{ message }}<br /> 
    {% endif %} 

{% endfor %} 
+0

非常感谢!那是我想要达到的 – Barburka

0

有人谁是寻找一个答案:

#models.py 
class Message(models.Model): 
from_who = models.ForeignKey(User, related_name='sent') 
to = models.ForeignKey(User, related_name='recieved') 
text = models.CharField(max_length=1000) 
timestamp = models.DateTimeField(auto_now_add=True) 
new = models.BooleanField(default=True) 

new_messages = NewMessageManager() 

#managers.py 
class NewMessageManager(models.Manager): 

def new_messages(self): 
    return super(NewMessageManager, self).get_queryset().filter(new=True) 

#template.html 
{% if request.user.recieved.new_messages %} 
    <span class="badge badge-danger">{{ request.user.recieved.new_messages.count }}</span> 
{% endif %}