Как создать несколько типов пользователей с помощью поля OneToOne в Django?
Я хочу создать 2 типа пользователей - Customer и Company. Я уже создал пользовательского пользователя, показанного ниже. Вот их файлы моделей -
class UserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
"""Create and save a User with the given email and password."""
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, is_staff=False, is_superuser=False, **extra_fields):
"""Create and save a regular User with the given email and password."""
extra_fields.setdefault('is_staff', is_staff)
extra_fields.setdefault('is_superuser', is_superuser)
return self._create_user(email, password, **extra_fields)
class User(AbstractUser):
"""User model."""
username=None
contact = models.CharField(max_length=100)
USERNAME_FIELD = 'id'
REQUIRED_FIELDS = ['password']
objects = UserManager()
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
name = models.CharField(max_length=100)
email = models.EmailField(_('email address')
class Company(models.Model):
"""User model."""
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
company_name = models.CharField(max_length=100)
company_email = models.EmailField(_('email address'), unique=True)
Я застрял на создании файла сериализатора. Большинство других ответов используют формы для создания нескольких типов пользователей, но я просто хочу создать API. Может ли кто-нибудь помочь мне создать файл сериализатора для этого?
class UserListSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields="__all__"
class CustomerSerializer(serializers.ModelSerializer):
user = UserSerializer(many=True, read_only=True)
class Meta:
model = Customer
fields="__all__"
def create(self, validated_data):
????