Django - После регистрации данные должны попасть в 2 разные таблицы (клиент и пользователь)
Я создаю сайт электронной коммерции, на котором люди могут выбрать, входить или нет в систему, но все равно могут сделать заказ и оформить заказ (даже если вы AnonymousUser или гостевой пользователь). Сейчас я делаю форму входа и регистрации на своем сайте. Форма входа работает и выглядит хорошо, но форма регистрации не работает и выдает ошибку "RelatedObjectDoesNotExist at / User has no customer."
Я думаю, что причина в том, что когда я регистрируюсь, он только создает User в базе данных, но не регистрирует ничего в таблице Customer (которая состоит из Name и Email). Как я могу зарегистрировать Customer и User одновременно при нажатии кнопки "Submit"? И как я могу сделать так, чтобы этот конкретный пользователь имел только статус "Сотрудник" и не мог вносить изменения на сайте администратора?
Также я хочу добавить новые поля в форме регистрации для имени и электронной почты, которые будут идти непосредственно в таблицу Customer. Я пытался сделать это, но это не работает и выдает ошибку, которая говорит "django.core.exceptions.FieldError: Unknown field(s) (name) specified for User".
Вот что я сделал:
from django.forms import ModelForm
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import *
class CustomUserCreationForm(UserCreationForm):
name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200)
class Meta:
model = User
fields = ['username', 'name', 'email', 'password1', 'password2']
SUMMARY:
Я хочу добавить дополнительные поля в форму регистрации под названием Name и Email. Затем после щелчка на форме Register я хочу создать User и Customer одновременно. Но User должен иметь только "Статус сотрудника" и не может вносить изменения на сайте администратора. А поле Имя и Email должны попасть в таблицу Customer с созданным мной пользователем.
Вот скриншот моей формы Register form:

Вот мой forms.py файл:
from django.forms import ModelForm
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'password1', 'password2']
def __init__(self, *args, **kwargs):
super(CustomUserCreationForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs.update({'class':'form-control','placeholder':'Enter Username'})
self.fields['password1'].widget.attrs.update({'class':'form-control','placeholder':'Enter Password'})
self.fields['password2'].widget.attrs.update({'class':'form-control','placeholder':'Confirm Password'})
Вот мой views.py файл:
def loginUser(request):
page = 'login'
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
print('USER:', user)
if user is not None:
login(request, user)
return redirect('/')
return render(request, 'store/login_register.html', {'page': page})
def logoutUser(request):
logout(request)
return redirect('/')
def registerUser(request):
page = 'register'
form = CustomUserCreationForm()
if request.method == "POST":
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.save()
user = authenticate(request, username=user.username, password=request.POST['password1'])
if user is not None:
login(request, user)
return redirect('/')
context = {'form': form, 'page': page}
return render(request, 'store/login_register.html', context)
Вот мой models.py файл:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200)
def __str__(self):
return self.name
Вот мой register.html файл:
<form class="form" method="POST">
{% csrf_token %}
<h2> REGISTER </h2>
<h4> Create your account now! </h4>
<br />
{% for field in form %}
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">{{field.label}}:</label>
{{field}}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">Submit</button>
<br />
<p> Already have an account? <a href="{% url 'login' %}">Login here</a> </p>
</form>