我有以下型号:
class UserProfile(models.Model):
user = models.OneToOneField(User)
class Site(models.Model):
user = models.ForeignKey(User)
site_name = models.CharField(max_length=128, blank=False, null=False)
class Team(models.Model):
site = models.ForeignKey(Site)
team_member_name = models.CharField(default='name', max_length=128, blank=False, null=False)
我有一个列出数据库中所有team
成员的视图:
@login_required
def home(request, team_member_id=None):
team_members = Team.objects.all().order_by('team_member_name')
如何对此进行过滤,以便只显示与登录的site
具有相同user
的团队成员?
答案 0 :(得分:1)
试试这个。
@login_required
def home(request, team_member_id=None):
user = request.user
team_members = Team.objects.all().filter(site__user=user).order_by('team_member_name')
答案 1 :(得分:1)
您可以使用model relations
来实现此目标。
要按其他模型中的字段排序,请使用与when相同的语法 你正在查询模型关系。就是这个名字 字段,后跟双下划线(__),后跟名称 新模型中的字段,等等,可以根据需要添加任意数量的模型 加入。
在您的情况下,以下应该有效:
team_members = Team.objects.filter(site__user=user).order_by('team_member_name')
答案 2 :(得分:1)
这可以单行完成,但让我解释一下,这样你才能理解这个概念:
您可以从请求中登录用户,因为您已经使用了@login_required(访问该视图的用户将始终登录)
loggedin_user = request.user
获取用户的网站:
site_of_logged_in_user = Site.objects.get(user=loggedin_user)
# if there can be only one site for a user
现在您可以通过网站过滤来获取团队
team = Team.objects.filter(site=site_of_logged_in_user)