为请求的用户查询 ManyToManyfield
query ManyToManyfield for requested user
我有两个模型,一个用户模型和一个运动模型。这两个模型具有 m2m 关系,因为用户可以进行多项运动,并且一项运动可以由多个用户进行。我想获取用户运动的查询集,因此只有特定用户的运动会显示给该用户。
我已经创建了一个 context_processors.py 文件,这样该信息就可以在网站的所有页面上使用。问题是我不知道如何查询数据库来获取这些信息。
这些是我的模型:
class Sport(models.Model):
name = models.CharField(max_length=100, null=False)
class User(AbstractUser):
...
sports = models.ManyToManyField(Sport)
现在,我得到了所有可用的运动,就像这样
def test(request):
sports = Sport.objects.all()
return {
'x': sports
}
我只想在 sports 变量中获取请求的用户分配给的运动。
sports = request.user.sports.all()
如果要查找用户参加的运动,则必须过滤特定于用户行的运动模型查询集。
Sports.objects.filter(user__id = request.user.id)
由于 Sports 和 User 具有多对多关系,您可以在 Sports 模型相关查询中访问“User”模型属性。 “id”是 auto-generated 键,如果您使用任何主键,您可以用它替换“id”。
这里通常有两个选项:
Sport.objects.filter(user=request.user)
或:
request.user.sports.all()
两者将进行相同的数据库查询。您应该使用 @login_required
decorator [Django-doc] 来阻止 non-authenticated 用户访问视图,因为那时 request.user
不是用户对象。此外,视图可以 而不是 return 字典:它应该 return 一个 HttpResponse
对象,例如通过呈现模板:
from django.contrib.auth.decorators import <strong>login_required</strong>
<strong>@login_required</strong>
def test(request):
context = {
'sports': request.user.sports.all()
}
# …
我有两个模型,一个用户模型和一个运动模型。这两个模型具有 m2m 关系,因为用户可以进行多项运动,并且一项运动可以由多个用户进行。我想获取用户运动的查询集,因此只有特定用户的运动会显示给该用户。
我已经创建了一个 context_processors.py 文件,这样该信息就可以在网站的所有页面上使用。问题是我不知道如何查询数据库来获取这些信息。
这些是我的模型:
class Sport(models.Model):
name = models.CharField(max_length=100, null=False)
class User(AbstractUser):
...
sports = models.ManyToManyField(Sport)
现在,我得到了所有可用的运动,就像这样
def test(request):
sports = Sport.objects.all()
return {
'x': sports
}
我只想在 sports 变量中获取请求的用户分配给的运动。
sports = request.user.sports.all()
如果要查找用户参加的运动,则必须过滤特定于用户行的运动模型查询集。
Sports.objects.filter(user__id = request.user.id)
由于 Sports 和 User 具有多对多关系,您可以在 Sports 模型相关查询中访问“User”模型属性。 “id”是 auto-generated 键,如果您使用任何主键,您可以用它替换“id”。
这里通常有两个选项:
Sport.objects.filter(user=request.user)
或:
request.user.sports.all()
两者将进行相同的数据库查询。您应该使用 @login_required
decorator [Django-doc] 来阻止 non-authenticated 用户访问视图,因为那时 request.user
不是用户对象。此外,视图可以 而不是 return 字典:它应该 return 一个 HttpResponse
对象,例如通过呈现模板:
from django.contrib.auth.decorators import <strong>login_required</strong>
<strong>@login_required</strong>
def test(request):
context = {
'sports': request.user.sports.all()
}
# …