Django在使用内置的用户模型时,我如何按名称优雅地过滤朋友对象?

2024-10-01 15:40:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在建筑中学习,上了一节友谊课。在我的一个视图中,我想过滤友情,这样我的用户就可以看到他或她参与的所有友情的列表。你知道吗

给你一个想法,像这样的东西有有效的语法:

relevant_friends_list = FriendShip.objects.filter(request.user.username == creator || request.user.username == friend)

但你不能这么做,因为朋友和创建者是用户对象。你知道吗

你知道吗型号.py你知道吗

from django.contrib.auth.models import User
class FriendShip(models.Model):
    created = models.DateTimeField(auto_now_add=True, editable=False)
    creator = models.ForeignKey(User, related_name="friendship_creator_set")
    friend = models.ForeignKey(User, related_name="friend_set")
    def __str__(self):
        return self.creator.username + " | " + self.friend.username

如果要模仿教程,我会添加creator\u name=模型.charField(…)并将其设置为用户名或者别的什么。但听起来我想得太多了,感觉django会有一个最小的行解决方案。谢谢你的时间


Tags: django用户nameselffriendmodelsrequestusername
1条回答
网友
1楼 · 发布于 2024-10-01 15:40:46

你真是想得太多了。您可以按模型对象进行过滤,由于需要OR操作,因此可以使用Q对象,如下所示:

from django.db.models import Q

user = request.user
conditions = Q(creator=user) | Q(friend=user)
relevant_friends_list = FriendShip.objects.filter(conditions)

请注意请求用户仅在请求对象可用的视图中可用。你知道吗

相关问题 更多 >

    热门问题