2016-05-22 2 views
1

Мой urls.py:get_absolute_url с параметрами

urlpatterns = [ 
     ... 
     url(r'^profile/$', profile.profile, name='profile'), 
] 

model Мои:

class Reg(models.Model): 
    name = models.CharField(max_length=32, primary_key=True) 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, 
     related_name='%(app_label)s_%(class)s_reg', null=True) 
    ... 

    def get_absolute_url(self): 
     return reverse('core:profile', ???) 

Мои views:

@login_required 
def profile(request): 
    context_dict = {} 
    u = User.objects.get(username=request.user) 
    context_dict['user'] = u 
    r = reg.Reg.objects.get(user=u) 
    context_dict['reg'] = r 
    return render(request, 'core/reg.html', context_dict) 

Можно ли использовать get_absolute_url с видом различных профилей? Например, из/admin, когда вы смотрите профиль «Джон», вы нажимаете «вид на сайте» и получаете страницу профиля с данными john, а не вашими

+0

Что вы будете использовать для запроса данных, имени или имени Джона? Или, может быть, вы можете обновить свой вопрос с большим количеством полей из вашей модели. –

+0

Я могу использовать оба ... edit: теперь я собираюсь обновить. Готово. – fabio

+1

На данный момент ни URL, ни представление, которое вы нам показали, не имеют каких-либо положений для просмотра профиля любого пользователя, кроме того, с которым вы вошли в систему. – Ben

ответ

2

Ваши взгляды должны быть в состоянии принять дополнительный аргумент, предпочтительно идентификатор пользователя, поскольку имена обычно содержат пробелы:

from django.shortcuts import get_object_or_404 

@login_required 
def profile(request, user_id): 
    context_dict = {} 
    u = get_object_or_404(User, pk=user_id) 
    context_dict['user'] = u 
    r = reg.Reg.objects.get(user=u) 
    context_dict['reg'] = r 
    return render(request, 'core/reg.html', context_dict) 

Тогда ваш urls.py становится:

urlpatterns = [ 
     ... 
     url(r'^profile/(?P<user_id>[0-9]+)/$', profile.profile, name='profile'), 
] 

и, наконец, ваш models.py и get_absolute_url метод:

class Reg(models.Model): 
    name = models.CharField(max_length=32, primary_key=True) 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, 
     related_name='%(app_label)s_%(class)s_reg', null=True) 
    ... 

    def get_absolute_url(self): 
     return reverse('core:profile', user_id=self.id) 

 Смежные вопросы

  • Нет связанных вопросов^_^