查询 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_idusername,然后使用 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.