Django无法识别我的自定义用户的用户类型以进入受保护的页面视图(RelatedObjectDoesNotExist:用户没有用户类型)

时间:2019-03-11 14:20:11

标签: python django authentication user-input

我在定义自定义用户的Django时遇到问题,在这种情况下,这是Django 2.1中的“ cust”(客户的简称)。我还有其他几种用户类型,其中包含单独的注册表格,可以将它们注册为特定的用户类型。我是从Vitor Freitas撰写的教程“如何使用Django实现多种用户类型” 中构建的,它消除了Django的默认用户管理系统。我的目标是要有一个受保护的视图(客户中心),只有客户才能进入该视图,对于其他用户类型,依此类推。

下面是组成我的项目的错误和代码:


追踪

RelatedObjectDoesNotExist位于/​​ companyusers / cust /

用户没有权限。

File "/home/companysite/.virtualenvs/env/lib/python3.7/site-packages/django/views/generic/edit.py" in get
  189.         self.object = self.get_object()

File "/home/companysite/companysite/companyusers/views/cust.py" in get_object
  38.         return self.request.user.cust

File "/home/companysite/.virtualenvs/env/lib/python3.7/site-packages/django/utils/functional.py" in inner
  214.         return func(self._wrapped, *args)

File "/home/companysite/.virtualenvs/env/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py" in __get__
  414.                     self.related.get_accessor_name()

Exception Type: RelatedObjectDoesNotExist at /companyusers/cust/
Exception Value: User has no cust.

models.py

此文件是我对每种自定义用户类型进行分类的位置(即,我还有2个其他类和布尔值写的相同)。

class User(AbstractUser):
    is_cust = models.BooleanField(default=False)

class Cust(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='cust', primary_key=True)

cust.views.py

这是客户的视图文件,其中包括表单和中心视图。我不确定我是否在正确编写中心视图以验证用户是客户。

class CustSignUpView(CreateView):
    model = User
    form_class = CustSignUpForm
    template_name = 'registration/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'cust'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('cust:custhub')

@method_decorator([login_required, cust_required], name='dispatch')
class CustHubView(UpdateView):
    model = Cust
    template_name = 'companyusers/cust/custhub.html'
    success_url = reverse_lazy('cust:custhub')

    def get_object(self):
        return self.request.user.cust

forms.py

这是我将用户注册为客户的表单文件,我不确定是否将用户类型Boolean更改为该文件。

class CustSignUpForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = User

    @transaction.atomic
    def save(self, commit=True):
        user = super().save(commit=False)
        user.is_cust = True
        if commit:
            user.save()
        return user

cust.urls.py

这是我正在调用客户中心视图的URL。

path('cust/', include(([
    path('', cust.CustHubView.as_view(), name='custhub'),
], 'companyusers'), namespace='cust')),

0 个答案:

没有答案