Django (dj-rest-auth) Пользовательская регистрация пользователей с помощью ForeignKey

Я создал пользователя custome в моем приложении, и указывает на запись часового пояса, в модели TimeRegion Model.

model.py

class TimeRegion(models.Model):
    id=models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False,)
    tz_key=models.CharField(max_length=200,)

class CustomUser(AbstractUser):
    id=models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False,)
    user_timezone=models.ForeignKey(TimeRegion,verbose_name="Time Zone",on_delete=models.DO_NOTHING, blank=True, null=True) 

Расширение вызова API для включения пользовательского поля. serializers.py

class CustomRegisterSerializer(RegisterSerializer):
    first_name = serializers.CharField()
    last_name = serializers.CharField()
    statement_agreement = serializers.BooleanField()
    user_timezone = serializers.UUIDField() #Tried CharField() and PrimaryKeyField()

    def get_cleaned_data(self):
        super(CustomRegisterSerializer, self).get_cleaned_data()
        return {
            'username': self.validated_data.get('username', ''),
            'password1': self.validated_data.get('password1', ''),
            'password2': self.validated_data.get('password2', ''),
            'email': self.validated_data.get('email', ''),
            'first_name': self.validated_data.get('first_name', ''),
            'last_name': self.validated_data.get('last_name', ''),
            'user_timezone': self.validated_data.get('user_timezone', ''),
        }

    def save(self, request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request, user, self)
        setup_user_email(request, user, [])
        user.user_timezone = self.cleaned_data.get('user_timezone')
        user.save()
        return user

setting.py

REST_AUTH_REGISTER_SERIALIZERS = {
    'REGISTER_SERIALIZER': 'api.serializers.CustomRegisterSerializer'
}

Каждый раз, когда я запускаю тест API, чтобы проверить, что я могу зарегистрировать нового пользователя, я получаю следующее сообщение об ошибке: код теста

# Get the timezone record
url_timezone = 'http://127.0.0.1:8000/api/v1/timezonelist/'
        response_timezone = self.client.get(url_timezone, content_type='application/json')

#Register the user to the first timezone:
url_signup = 'http://127.0.0.1:8000/api/v1/dj-rest-auth/registration/'
        params_signup={
            'first_name': 'John',
            'last_name': 'Tester',
            'email':'testuser@email.com',
            'password1':'pwdktudchJsuec123',
            'password2':'pwdktudchJsuec123',
            'user_timezone': response_timezone.data[0]['id'],
        }
        response_signup = self.client.post(url_signup, data=json.dumps(params_signup), content_type='application/json')

ответ:

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

tz_obj =TimeRegion.objects.create(
            region='Europe',
            tz_name='Paris',
            tz_key='Europe/Paris'
        )
...
'user_timezone': tz_obj.pk.hex 

Мне интересно, является ли это ограничением dj-rest-auth?

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