Django;如何过滤和区分对象

时间:2018-07-24 07:49:06

标签: python django

我正在使用Django创建一个项目,并且想知道如何区分对象。现在,我正在创建消息框部分,我想要做的是显示用户一直在联系的用户名。我目前的方式是这样的

models.py

class Message(models.Model):
    ''''''
    text = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='myself')
    someone = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='someone')

views.py

def inbox(request):
    '''See messages history'''
    messages = Message.objects.filter(user=request.user).distinct('someone')
    notification = Message.objects.filter(someone=request.user).distinct('user')
    return render(request, 'campus_feed/inbox.html', {'messages': messages})

所以我想做的是列出正在与我联系或与我联系的用户,但我不想多次显示相同的名字,但是我无法提出一种很好的过滤方法。有人可以给我提示吗?

1 个答案:

答案 0 :(得分:3)

如果需要用户,则应请求用户。

User.objects.filter(Q(myself__someone=request.user) | Q(someone__user=request.user))

这为您提供了既是当前用户消息中的“某人”,又是当前用户消息中的“用户”的所有用户。由于您是直接查询用户,因此不可能重复。