用户模型中用户名的Django queryset

时间:2015-06-06 09:17:14

标签: python django django-queryset username

我已经 models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User) #from contrib.auth,...
    titulo = models.CharField(max_length=50, blank=True, default="")
    descripcion = models.TextField(default="")

    # Valor por defecto, "Pagina de +nombre usuario"
    def save(self, *args, **kwargs):
        if not self.titulo:
            self.titulo = "Pagina de " + self.user.get_username()
        super(UserProfile, self).save(*args, **kwargs)

views.py

 def ShowUserPage(request):
    UsuarioElegido = request.path.split('/')[1]
    UsuarioModel = UserProfile.user.get_user(UsuarioElegido)
    return HttpResponse(UsuarioElegido)

我想得到UsuarioElegido的“titulo”和“descripcion”。 UsuarioElegido是request.path例如/“root”。但我无法得到帮助?

收到此错误:ReverseSingleRelatedObjectDescriptor'对象没有属性'get_user'UsuarioModel = UserProfile.objects.filter(user.username = UsuarioElegido)

但我不知道如何得到它。

之前尝试过这个
         UsuarioModel = UserProfile.objects.filter(user.username=UsuarioElegido)
编辑:我刚试过这个,但是Django无法在视图中找到我的ShowUserPage:/?

def ShowUserPage(request):
    UsuarioElegido = request.path.split('/')[1]
    UsuarioModel = User.objects.get(username=UsuarioElegido)
    UsuarioModel = UserProfile.objects.filter(user=UsuarioModel)
    return HttpResponse(UsuarioElegido)

2 个答案:

答案 0 :(得分:1)

假设username是唯一的:

UsuarioModel = UserProfile.objects.get(user__username=UsuarioElegido)

__(双下划线)用于follow relations in lookups

答案 1 :(得分:1)

首先,您不必自己分析request.path并提取网址的所有必要部分。您可以使用urls.py文件进行映射。例如:

urlpatterns = [
    url(r'^user/(?P<username>\w+)$', views.ShowUserPage),
]

处理此请求的ShowUserPage视图方法具有以下签名:

def ShowUserPage(request, username)

其次,如果要按名称查找用户,可以使用以下查询:

UserProfile.objects.get( user__username=UsuarioElegido )

它将通过本地Django类的username属性搜索User。