Я пытаюсь создать банковскую систему, используя DRF.Мне нужно автоматически назначать пользователям номер учетной записи, сразу же после того, как они заполнили свои регистрационные данные.Кроме этого, прошу прощения, если у меня нет правильных навыков задавания вопросов.
Я использую django - версия 2.2.3
models.py
class AccountDetails(models.Model):
GENDER_CHOICE = (
("M", "Male"),
("F", "Female"),
)
user = models.OneToOneField(
User,
related_name='account',
on_delete=models.CASCADE,
)
account_no = models.AutoField(
unique=True,
primary_key=True,
null=False,
validators=[
MinValueValidator(10000000),
MaxValueValidator(99999999)
]
)
views.py
def register_view(request):
if request.user.is_authenticated:
return redirect("home")
else:
user_form = UserRegistrationForm(
request.POST or None,
)
account_form = AccountDetailsForm(
request.POST or None,
request.FILES or None
)
address_form = UserAddressForm(
request.POST or None
)
if user_form.is_valid() and account_form.is_valid() and address_form.is_valid():
user = user_form.save(commit=False)
account_details = account_form.save(commit=False)
address = address_form.save(commit=False)
password = user_form.cleaned_data.get("password1")
user.set_password(password)
user.save()
account_details.user = user
account_details.save()
address.user = user
address.save()
new_user = authenticate(
account_no=user.account_no, password=password
)
login(
request, new_user, backend='accounts.backends.AccountNoBackend'
)
messages.success(
request,
'''Thank You For Creating A Bank Account {}.
Your Account Number is {}, Please use this number to login
'''.format(new_user.full_name, new_user.account_no))
return redirect("home")
context = {
"title": "Create a Bank Account",
"user_form": user_form,
"account_form": account_form,
"address_form": address_form,
}
return render(request, "accounts/register_form.html", context)
следующеевывод:
AttributeError at /accounts/register/
'AnonymousUser' object has no attribute '_meta'
Ошибка, которая указывает на: views.py:
#request, new_user, backend='accounts.backends.AccountNoBackend'
Я ожидаю, что будет перенаправлен на страницу сведений о транзакции.
Полный вызов трассировки:
Traceback (последний вызов был последним): файл "/home/hunter/Desktop/banking/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", строка34, во внутреннем ответе = get_response (запрос)
Файл "/home/hunter/Desktop/banking/venv/lib/python3.6/site-packages/django/core/handlers/base.py",строка 115, в _get_response response = self.process_exception_by_middleware (e, request)
File "/home/hunter/Desktop/banking/venv/lib/python3.6/site-packages/django/core/handlers/base.py ", строка 113, в _get_response response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)
Файл" /home/hunter/Desktop/banking/banking_system/accounts/views.py ", строка 48, в запросе register_view, new_user, backend = 'accounts.backends.AccountNoBackend'
Файл "/home/hunter/Desktop/banking/venv/lib/python3.6/site-packages/django/contrib / auth / init .py ", строка 126, в файле request.session [SESSION_KEY] = user._meta.pk.value_to_string (user)
File" / home / hunter /Рабочий стол / банковское дело / venv / lib / python3.6 / site-packages / django / utils / functions.py ", строка 257, во внутренней функции возврата (self._wrapped, * args)
AttributeError: 'AnonymousUser'У объекта нет атрибута' _meta '[11 / Jul / 2019 13:06:54] "POST / account / register / HTTP / 1.1" 500 84970