2015-07-24 9 views
0

Я использую пользовательские модели пользователя с двумя сущностями:Не работает get_context_data в Django

class WeddyUser(AbstractBaseUser): 
    username = models.CharField(
    'Юзернейм', 
    max_length=50, 
    unique=True, 
    db_index=True 
    ) 
    email = models.EmailField(
    'Электронная почта', 
    max_length=255, 
    blank=True, 
    null=True 
    ) 
    is_vendor = models.BooleanField(
    'Волшебник', 
    default=False 
    ) 
    #other atributes and methodes 

Этот класс наследуется двумя другими типами пользователей:

class Vendor(WeddyUser): 
    org_name = models.CharField('Название организации', max_length=50, blank=True) 
    slug = models.SlugField('Короткое название', unique=True) 
    city = models.ForeignKey(City, null=True, blank=True) 
    description = models.TextField('О себе', blank=True) 

и

class PlainUser(WeddyUser): 
    date_of_birth = models.DateField('Дата рождения', null=True, blank=True) 
    favor_news = models.ManyToManyField('news.News', blank=True) 
    favor_pic = models.ManyToManyField('news.Photo', blank=True) 

Я пытаюсь создать личную зону для этих пользователей:

в URLs:

url(r'^desktop/$', views.DesktopView.as_view(), name='desktop'), 

в шаблоне:

"{% url 'desktop' %}" 

в виду:

class LoginRequiredMixin(object): 

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


class DesktopView(LoginRequiredMixin,DetailView): 
    model = WeddyUser 
    context_object_name = 'weddyuser' 

def get_context_data(self, **kwargs): 
    context = super(DesktopView, self).get_context_data(**kwargs) 
    if self.request.user.is_vendor: 
     context['vendor']= Vendor.objects.get(id=self.request.user.id) 
    context['plainuser']= PlainUser.objects.get(id=self.request.user.id) 
    return context 

def get(self, request, *args, **kwargs): 
    c = {} 
    c.update(csrf(request)) 
    user = request.user 
    if user.is_vendor: 
     return render_to_response('user/vendor_edit_profile.html', RequestContext(request, c)) 
    return render_to_response('user/user_edit_profile.html', RequestContext(request, c)) 

Но я не могу получить доступ к 'vendor' или 'plainuser' контекста объекты, а также 'weddyuser' контекста тоже не работает. Я полагаю, моя функция прибудет делает шаблон без какого-либо контекста объекты

+0

Вы не получают ключ в данных контекста, или вы получаете значения как None? –

+0

Я не понимаю, откуда должно получиться свойство 'user.is_vendor'. – RemcoGerlich

+0

У меня есть атрибут 'is_vendor = models.BooleanField (default = False)', извините, я не указал его –

ответ

0

изменения этого кода,

context['vendor']= Vendor.objects.get(id=self.request.user.id) 
context['plainuser']= PlainUser.objects.get(id=self.request.user.id) 

этому

context['vendor']= Vendor.objects.get(weddyuser_ptr_id=self.request.user.id) 
context['plainuser']= PlainUser.objects.get(weddyuser_ptr_id=self.request.user.id) 

Pass контекстных данные в обратном заявлении

return render_to_response('user/vendor_edit_profile.html', self.get_context_data() ,RequestContext(request, c)) 
return render_to_response('user/user_edit_profile.html', self.get_context_data(), RequestContext(request, c)) 
+0

извините, для чего? Если я добавлю 'abstract = True', я получу' django.core.exceptions.ImproperlyConfigured: модель WeddyUser является абстрактной, поэтому она не может быть зарегистрирована в admin.' –

+0

Я отредактировал ответ, пожалуйста, измените контекст ['vendor']. и контекст ['plainuser'] queryset. –

+0

Я пробовал - ничего. Как я сказал выше, я думаю, что моя функция get не передает какой-либо объект контекста в шаблон. Beacuse Я не могу использовать также context_object_name = 'weddyuser' –

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