Набор запросов Django по имени пользователя в модели пользователя

У меня 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)

Я хочу получить "titulo" и "descripcion" UsuarioElegido. 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 ответа

Прежде всего, вам не нужно анализировать request.path самостоятельно и распакуйте все необходимые части URL. Вы можете сопоставить это с помощью urls.py файл. Например, вот так:

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

И ваш ShowUserPage Метод view, который обрабатывает этот запрос, имеет следующую подпись:

def ShowUserPage(request, username)

Во-вторых, если вы хотите найти пользователя по его имени, вы можете использовать следующий запрос:

UserProfile.objects.get( user__username=UsuarioElegido )

Будет искать по username атрибут нативного класса Django для пользователя.

Если предположить, username уникален:

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

использование __ (двойное подчеркивание) следить за отношениями в поисках.

Другие вопросы по тегам