Django не распознает тип пользователя моего пользовательского пользователя для входа в защищенное представление страницы (RelatedObjectDoesNotExist: у пользователя нет типа пользователя) - PullRequest
0 голосов
/ 11 марта 2019

У меня возникли проблемы с определением пользовательского пользователя в Django, который в данном случае является «cust» (сокращение от customer) в Django 2.1.У меня есть несколько других типов пользователей, которые содержат отдельные формы регистрации, чтобы зарегистрировать их как определенный тип пользователя.Я построил это из учебника "Как реализовать многопользовательские типы с Django" от Vitor Freitas, который устраняет систему управления пользователями по умолчанию в Django.Моя цель - иметь защищенное представление (клиентский центр), в которое могут войти только клиенты, и т. Д. Для других типов пользователей.

Ниже приведен код ошибки и код моего проекта:


Traceback

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.

моделей.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')),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...