как сериализаторам django 3 связать модель и создать экземпляр - PullRequest
0 голосов
/ 30 сентября 2019

Мой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...