在 Django Rest Framework 中将 JSON 整数列表转换为字符串

Maj*_*jid 5 python django rest json django-rest-framework

我正在尝试从用户那里获取整数列表,并将它们转换为逗号分隔的字符串,然后再在 Django Rest Framework 中保存模型。

我的模型是这样的:

class Message(models.Model):
    name = models.CharField(max_length=100)
    regions = models.TextField(validators=[RegexValidator(regex='^[0-9,]+$')])
    created_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

和我的序列化程序:

class MessageSerializer(ModelSerializer):
    regions_list = serializers.ListField(child=serializers.IntegerField())

    class Meta:
        model = Message
        fields = ('id', 'name', 'regions_list', 'created_at')
        read_only_fields = ('created_at')
Run Code Online (Sandbox Code Playgroud)

我的输入:

{
  "name": "TEST",
  "regions_list": [1, 2, 3, 4]
}
Run Code Online (Sandbox Code Playgroud)

如何在db中将regions_list转换为逗号分隔的字符串(区域)?

Django:1.10
DRF:3.5

Maj*_*jid 8

我覆盖to_representationto_internal_value方法。它对我很有用。

class MessageSerializer(ModelSerializer):
    regions_list = serializers.ListField(child=serializers.IntegerField())

    class Meta:
        model = Message
        fields = ('id', 'name', 'regions_list', 'created_at')
        read_only_fields = ('created_at')

    def to_representation(self, instance: Message):
        instance.regions_list = [int(i) for i in instance.regions.split(',')]
        return super(MessageSerializer, self).to_representation(instance)

    def to_internal_value(self, data):
        ret = super(MessageSerializer, self).to_internal_value(data)
        if ret['regions_list']:
            ret['regions'] = ','.join(str(i) for i in ret['regions_list'])

        return ret
Run Code Online (Sandbox Code Playgroud)