Джанго: DRF, UTF-8 и суррогаты - PullRequest
0 голосов
/ 31 октября 2019

У меня странная ошибка при производстве, связанная с суррогатными парами utf-8 и . Скопируйте код, чтобы воспроизвести проблему (для простоты я представляю все в одном файле и опускаю некоторые ненужные детали)

class User(models.Model):
    username = models.CharField('Username', max_length=255,)

    class Meta:
        app_label = 'users'


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.User
        fields = ['username']


class UserViewSet(viewsets.ModelViewSet):
    queryset = models.User.objects.all()
    serializer_class = UserSerializer

и тесты:

def test_create_user_and_set_password(django_app):
    response = django_app.post_json(
        reverse('users-list'),
        {
            'username': '\ud83d',
        }
    )
    assert response.status_code == 201
    assert models.User.objects.count() == 1

в результате выполнения теста Iполучить сообщение об ошибке (так же, как в производственном процессе):

    def execute(self, query, params=None):
        if params is None:
            return Database.Cursor.execute(self, query)
        query = self.convert_query(query)
>       return Database.Cursor.execute(self, query, params)
E       UnicodeEncodeError: 'utf-8' codec can't encode character '\ud83d' in position 0: surrogates not allowed

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

...