Мой Modes.py выглядит так, как показано ниже: у них есть 3 связанных модели, все три модели соединены с одним полем, поэтому я пытаюсь создать один сериализатор для всех 3 моделей, и я хочу создать экземпляр 3 модели одновременно, потому чтоиз них они связаны друг с другом одним полем, которое я могу сделать с двумя моделями, кто-нибудь может мне помочь заранее спасибо.
class UserProfile(models.Model):
# some field
telephone = models.CharField(max_length=12)
class User(AbstractUser):
username = None
email = models.EmailField(_('email'), unique=True)
first_name = models.CharField( _('first name'), max_length=250)
last_name = models.CharField(_('last name'), max_length=250)
profile = models.OneToOneField(UserProfile, on_delete=models.CASCADE, null=True)
class Genre(MPTTModel):
user = models.OneToOneField(User, on_delete=models.CASCADE)
parent = TreeForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='reporting_manager')
serializers.py
class UserProfileModifySerializer(ModelSerializer):
class Meta:
model = UserProfile
fields = ['telephone']
class EmployeeCreateSerializer(ModelSerializer):
profile = UserProfileModifySerializer()
id = PrimaryKeyRelatedField(read_only=True)
class Meta:
model = User
fields = [
'id',
'email',
'first_name',
'last_name',
'profile',
]
# def create(self, validated_data):
# profile_data = validated_data.pop('profile')
# instance_profile = UserProfile.objects.create(**profile_data)
# instance_user = User(profile=instance_profile, **validated_data)
# password = randomStringDigits()
# instance_user.set_password(password)
# instance_user.save()
# return instance_user
class GenreModifySerializer(ModelSerializer):
user = EmployeeCreateSerializer()
class Meta:
model = Genre
fields = ['user', 'parent']
def create(self, validated_data):
user_data = validated_data.pop('user')
instance_user = User(**user_data)
password = randomStringDigits()
instance_user.set_password(password)
instance_user.save()
instance_genre = Genre.objects.create(user=instance_user, **validated_data)
return instance_genre