У меня возникли проблемы с определением пользовательского пользователя в 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')),