Набор запросов 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)
использование __
(двойное подчеркивание) следить за отношениями в поисках.