Django как сделать запрос к профайлу user'a в шаблоне и проверить принадлежность к группе?

Добрый день. Стоит довольно тривиальная задача создать два типа пользователей на сайте.
Я изначально,наверное. пошел по неверному пути и просто расширил модель встроенного User двумя профайлами, а при регистрации одного из типов пользователей добавлял в группу, чтобы можно их было разделять.
Сейчас создаю для пользователей личные кабинеты и столкнулся вроде бы не сложной проблемой.
Как в шаблоне понять принадлежит ли юзер определенной группе и в зависимости от результата отдавать ссылку на профайл. И второе - как получить значение поля профайла юзера в шаблоне.

class VendorProfile(models.Model):
    user = models.OneToOneField(User, related_name='vprofile')
    org_name = models.CharField(max_length=50, blank=True)
    slug = models.SlugField(unique=True)
    #....


class UserProfile(models.Model):
    user = models.OneToOneField(User,related_name='uprofile')
    website = models.URLField(blank=True)
    avatar = models.ImageField(upload_to='profile_images', blank=True)
  • Вопрос задан
  • 1512 просмотров
Решения вопроса 1
dunmaksim
@dunmaksim
Технический писатель
В статье я написал, как делать расширенную модель пользователя: dunmaksim.blogspot.ru/2015/05/django-18.html
Для решения Вашей задачи нужно:
  • описать базовую модель User с полем role или полями вида is_user, is_vendor и т.п.
  • унаследовать от неё классы Vendor и PlainUser

В виде делаем ещё проще (показано для ClassBasedView, так же требуется обязательная авторизация, но Вы можете допилить для себя):
from os import path

from django.contrib.auth.decorators import login_required
from django.core.context_processors import csrf
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.views.generic import View


class Login(View):

    def get(self, request):
        c = {}
        c.update(csrf(request))
                RequestContext(request, c)
        return render_to_response(
            path.join('login', 'index.html'),
            RequestContext(request, c)
        )


class LoginRequiredMixin(object):

    @classmethod
    def as_view(cls, **initkwargs):
        view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
        return login_required(view)


class Desktop(LoginRequiredMixin, View):

    def get(self, request):
        c = {}
        c.update(csrf(request))
        user = request.user
        if user.is_admin:
            return render_to_response(
                path.join('admin', 'index.html'),
                RequestContext(request, c)
            )
        if user.is_vendor:
            return render_to_response(
                path.join('vendor', 'index.html'),
                RequestContext(request, c)
            )
        return render_to_response(
            path.join('desktop', 'index.html'),
            RequestContext(request, c)
        )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы