EcomUser() получил неожиданный аргумент ключевого слова 'mobile_number'

Я пытаюсь создать пользователя и связать его с профилем пользователя. Но вот в чем проблема. Вот моя модель профиля

class EcomUser(BaseModelMixin):
    profile = models.OneToOneField(
        settings.AUTH_USER_MODEL, unique=True, blank=True, null=True,
        on_delete=models.CASCADE)
    username = models.CharField(max_length=100, blank=True)
    email = models.CharField(max_length=100, blank=True, null=True)
    name = models.CharField(max_length=100, blank=True)
    referral_code = models.CharField(max_length=10, blank=True)
    signinId = models.CharField(max_length=20, blank=True)
    GOOGLE = 'GOOGLE'
    APPLE = 'APPLE'
    MOBILE_NUMBER = 'mobile_number'
    LOGIN_TYPES = (
        (GOOGLE, 'GOOGLE'), 
        (APPLE, 'APPLE'), 
        (MOBILE_NUMBER, 'mobile_number')
    )
    loginType = models.CharField(max_length=15, choices=LOGIN_TYPES, default=MOBILE_NUMBER)

    class Meta:
        db_table = "ecom_user"

Моя модель пользователя:

class User(AbstractBaseUser, BaseModelMixin):
    email = models.EmailField(
        verbose_name='email_address',
        max_length=255,
        blank=True,
        null=True
    )
    username = models.CharField(max_length=128, null=True,unique=True)
    fullName = models.CharField(max_length=256, blank=True)
    mobile_number = models.CharField(max_length=15, blank=True,unique=True)
    is_superuser = models.BooleanField(default=False)    
    class Meta:
        db_table = "users"

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = []  # Email & Password are required by default.

    def get_full_name(self):
        # The user is identified by their email address
        return self.fullName

    def __str__(self):              # __unicode__ on Python 2
        return self.email

    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    objects = UserManager()

и serializer.py

class UserRegisterSerializer(serializers.Serializer):
    """Normal serializer which accepts mobile number"""
    mobile_number = serializers.CharField(max_length=10, min_length=10, required=True)
    referral_code = serializers.CharField(max_length=10, min_length=10, required=True)
    email = serializers.EmailField(max_length=255)


    def validate_referral_code(self, referral_code):
        if not re.match(r"^[\w]{10}$", referral_code):
            raise serializers.ValidationError("Wrong Referral Code")
        return referral_code

    def validate_mobile_number(self, mobile_number):
        if not re.match(r"^[\d]{10}$", mobile_number):
            raise serializers.ValidationError("Please pass proper mobile number")
        return mobile_number

class EcomUserSerializer(serializers.ModelSerializer):
    profile_id = serializers.IntegerField(required=True)
    mobile_number = serializers.CharField(max_length=10, min_length=10, required=True)
    referral_code = serializers.CharField(max_length=10, min_length=10, required=True)
    class Meta:
        model = EcomUser
        fields= ('profile_id','referral_code', 'mobile_number', 'loginType', 'signinId')
        
    def create(self, data):
        instance = EcomUser.objects.create(**data)
        return instance

views.py

<
1
mobile_number --- mobile_number
2
not found
4
is user create?
yes
linked profile 1 ----
7
Когда я пытаюсь запустить API на postman. Он показывает "EcomUser() получил неожиданный аргумент ключевого слова 'mobile_number'", а вывод в терминале показывает следующее:

Пользователь создан, но не может связать с профилем, кто-нибудь может помочь?

В вашей модели EcomUser нет поля mobile_number. Таким образом, когда вы вызываете

 ecomuser_data = ecom_serializer.save()

после добавления

 info['mobile_number'] = mobile_number

if не работает, оставляя пользователя без профиля. Я полагаю, что is_valid() проверяет только нужные поля, не обнаруживая лишних, но дополнительное поле приводит к тому, что сохранение не выполняется с показанной ошибкой. Вы уже добавили поле при создании пользователя, поэтому оно не нужно в профиле, так что удаление второй строки должно заставить все работать

Вернуться на верх