Регистрация клиентов не отображается в админке django
Пытаюсь создать форму регистрации клиентов для сайта электронной коммерции. Ошибок при отправке формы нет, но данные не отображаются в админке django. Вот необходимые коды :
models.py
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
full_name = models.CharField(max_length=200)
address = models.CharField(max_length=200, null=True, blank=True)
joined_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.full_name
urls.py
urlpatterns = [path("register",views.register, name="register")]
forms.py
class CustomerRegistrationForm(forms.ModelForm):
username = forms.CharField(widget=forms.TextInput())
password = forms.CharField(widget=forms.PasswordInput())
email = forms.CharField(widget=forms.EmailInput())
class Meta:
model = Customer
fields = ["username", "password", "email", "full_name", "address"]
def clean_username(self):
uname = self.cleaned_data.get("username")
if User.objects.filter(username=uname).exists():
raise forms.ValidationError(
"Customer with this username already exists.")
return uname
views.py
def register(request):
form = CustomerRegistrationForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
email = form.cleaned_data.get("email")
user = User.objects.create_user(username, email, password)
form.instance.user = user
return redirect("/")
return render(request,"register.html",{'form':form})
register.html
{% load crispy_forms_tags %}
<div class="container">
<div class="row">
<div class="col-md-6 mx-auto">
<h3>Customer Registration Form</h3><hr>
<form action="" method="POST">
{% csrf_token %}
{{form|crispy}}
<button class="btn btn-primary" >Register as a Customer</button>
</form>
<p> Already have an account? <a href="/home">Login here</a></p>
</div>
</div>
</div>
Заранее спасибо:)
В вашем представлении вы создаете User
s, а не Customer
s.
Если вы начинаете новый проект, я бы предложил использовать пользовательскую модель.
Если это невозможно, нужно сначала сохранить форму, чтобы создать экземпляр Customer
, а затем связать его с соответствующей моделью User
:
def register(request):
form = CustomerRegistrationForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
email = form.cleaned_data.get("email")
customer = form.save(commit=False)
user = User.objects.create_user(username, email, password)
customer.user = user
customer.save()
form.instance.user = user
return redirect("/")
return render(request,"register.html",{'form':form})