Django назначить пользователя модели
Я хочу назначить пользователя модели в django, я создал пользовательскую модель User и формы регистрации/входа, но теперь я хочу назначить модель User другой модели Customer, когда создается новый пользователь Вот модель Customer
class Customer(models.Model):
id = models.AutoField(primary_key=True)
User = models.OneToOneField(
Account, on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
phone = models.CharField(max_length=200, default='0', null=True, blank=True)
address = models.CharField(
max_length=200, default=' ', null=True, blank=True)
city = models.CharField(max_length=200, default=' ', null=True, blank=True)
def __str__(self):
if self.name == None:
return "ERROR-CUSTOMER NAME IS NULL"
return self.name
Примечание: Я могу назначить пользователя вручную в базе данных и она перечисляет всех пользователей, но я хочу, чтобы она делала это сама, когда создается новый пользователь
Я думаю, что лучше расширить модель User и добавить больше полей, чем создавать новую модель (в которой есть User onetoonefiled). Что-то вроде этого:
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
Именно такой подход я использую в своих проектах.
Здесь у вас есть поля модели пользователя по умолчанию:
Поля по умолчанию модели пользователя
Вам не нужно добавлять их в ваш класс Profile.
Я основываюсь на этой статье: Как расширить пользовательскую модель Django Model
не забудьте добавить в файл admin.py:
from django.contrib import admin
from .models import Profile
# Register your models here.
admin.site.register(Profile)
чтобы увидеть профили на странице администратора
Исправлено путем установки пользователя в модели Customer при создании пользователя
Customer.objects.create(user=request.user, name=username, email=email, phone=phone)