查询 Django 模型对象
Querying Django model object
我可以在下面的 UserProfile 模型中使用 user_id 查询用户的个人资料。但我想在 url 中使用 django.contrib.auth.models.User.username
中的用户名。
urls.py 目前看起来像:
path('profile/<int:user_id>', login_required(views.UserProfileDetail), name='userprofile'),
因此,对于上述网址,我想使用类似的东西:
path('profile/<str:username>', login_required(views.UserProfileDetail), name='userprofile'),
知道如何正确编写查询吗?到目前为止的所有尝试 returns 一个错误
views.py:
def UserProfileDetail(request, user_id, *args, **kwargs):
profile = UserProfile.objects.get(user_id = user_id)
profile_display = {'profiledetail': profile }
return render(request, 'main/userprofile.html', context=profile_display)
这是模型的样子:
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='userprofile')
userPhone = models.IntegerField(blank=True, null=True)
location = models.CharField(max_length=100, blank=True, null=True)
您可以接受具有默认值的 user_id
和 username
,然后使用 Q
对象进行查询以查找 UserProfile
,其中至少有一个两场比赛中。路径保证一个通过:
from django.contrib.auth.decorators import login_required
from django.db.models import Q
@login_required
def UserProfileDetail(request, user_id=None, username=None):
profile = UserProfile.objects.get(
<b>Q(user_id=user_id) | Q(user__username=username)</b>
)
profile_display = {'profiledetail': profile }
return render(request, 'main/userprofile.html', context=profile_display)
您可能想使用 login_required
作为装饰器。这避免了每次都将视图包装在 login_required
.
中
Note: Functions are normally written in snake_case, not PerlCase, therefore it is
advisable to rename your function to user_profile_detail
, not UserProfileDetail
.
Note: It is normally better to make use of the settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use the User
model [Django-doc] directly. For more information you can see the referencing the User
model section of the documentation.
我可以在下面的 UserProfile 模型中使用 user_id 查询用户的个人资料。但我想在 url 中使用 django.contrib.auth.models.User.username
中的用户名。
urls.py 目前看起来像:
path('profile/<int:user_id>', login_required(views.UserProfileDetail), name='userprofile'),
因此,对于上述网址,我想使用类似的东西:
path('profile/<str:username>', login_required(views.UserProfileDetail), name='userprofile'),
知道如何正确编写查询吗?到目前为止的所有尝试 returns 一个错误
views.py:
def UserProfileDetail(request, user_id, *args, **kwargs):
profile = UserProfile.objects.get(user_id = user_id)
profile_display = {'profiledetail': profile }
return render(request, 'main/userprofile.html', context=profile_display)
这是模型的样子:
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='userprofile')
userPhone = models.IntegerField(blank=True, null=True)
location = models.CharField(max_length=100, blank=True, null=True)
您可以接受具有默认值的 user_id
和 username
,然后使用 Q
对象进行查询以查找 UserProfile
,其中至少有一个两场比赛中。路径保证一个通过:
from django.contrib.auth.decorators import login_required
from django.db.models import Q
@login_required
def UserProfileDetail(request, user_id=None, username=None):
profile = UserProfile.objects.get(
<b>Q(user_id=user_id) | Q(user__username=username)</b>
)
profile_display = {'profiledetail': profile }
return render(request, 'main/userprofile.html', context=profile_display)
您可能想使用 login_required
作为装饰器。这避免了每次都将视图包装在 login_required
.
Note: Functions are normally written in snake_case, not PerlCase, therefore it is advisable to rename your function to
user_profile_detail
, not.UserProfileDetail
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.