self.create () хранит данные отдельно от родительской модели - PullRequest
0 голосов
/ 08 апреля 2019

У меня проблема в том, что мой UserProfileModel имеет вложенную SubscriptionModel, когда я вызываю метод self.create (), он сохраняет SubscriptionModel вне родительской модели "UserProfileModel".

Сценарий отлично сохраняет пользователя ви пользовательской модели, и в UserProfileModel тоже без каких-либо проблем, но когда дело доходит до SubscriptionModel, он сохраняет его, но не в постоянной модели "UserProfileModel".

class SubscriptionModel(models.Model):

    subscription_name = models.CharField(_('subscription name'), max_length=50, choices=SUBSCRIPTION, default='F')

    def __str__(self):
        return self.subscription_name

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

# The parent model.

class UserProfileModel(models.Model):


    user = models.OneToOneField(User, on_delete=models.CASCADE, default='', related_name='user_instance')
    subscription = models.OneToOneField(SubscriptionModel, related_name='user_subscription', on_delete=models.CASCADE, blank=True, null=True)

    # Other fields....

    objects = UserProfileManager()

# The UserProfileManager() functions.

 @transaction.atomic
    def create_user_profile(self, user, subscription):
        password = user.pop('password')
        user = User(**user)
        user.set_password(password)
        user.save()
        subscription = SubscriptionModel(**subscription).save()
        self.create(user=user, subscription=subscription)
        return user

# The UserRegistrationSerializer.

class UserRegistrationSerializer(serializers.Serializer):

    subscription_name = serializers.ChoiceField(choices=SubscriptionModel.SUBSCRIPTION, default='F')

   # Other fields...

    def get_cleaned_data(self):
        return {
            'username': self.validated_data.get('username', None),
            'first_name': self.validated_data.get('first_name', None),
            'last_name': self.validated_data.get('last_name', None),
            'email': self.validated_data.get('email', None),
            'password': self.validated_data.get('password', None)
        }

   def get_subscription_cleaned_data(self):
        return {
            'subscription_name': self.validated_data.get('subscription_name', None)
        }

    def save(self, request):
        print(request.data)
        cleaned_data = self.get_cleaned_data()
        subscription = self.get_subscription_cleaned_data()
        user = UserProfileModel.objects.create_user_profile(user=cleaned_data, subscription=subscription)
        return user
...