我有一个带有字符串字段的模型,带有相应的模型序列化器。我想更改序列化器,以便它现在获取该字段的字符串列表,但在内部将其转换为字符串。
基本上, internal_repr = ','.join(input)
我尝试过更改validate函数中的数据类型,但是仍然收到验证错误,它不是字符串。这种变化应该在哪里发生?难道还需要重写该字段串行到ListSerializer
与child=CharField
指定的?
当前情况的基本表示:
模型:
class MyModel(models.Model):
myfield = models.CharField(max_length=100)
def save(self, *args, **kwargs):
self.full_clean()
return super(MyModel, self).save(*args, **kwargs)
序列化器:
MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('myfield')
我想让序列化器改为使用myfield的列表,然后通过','。join()将其转换为字符串
我能够添加myfield = serializers.ListField(child=serializers.CharField(), min_length=1)
到序列化器中以更改序列化器类型,以及重写to_internal_value()
和to_representation()
实现此方法。
现在的代码是:
模型:
class MyModel(models.Model):
myfield = models.CharField(max_length=100)
def save(self, *args, **kwargs):
self.full_clean()
return super(MyModel, self).save(*args, **kwargs)
序列化器:
MyModelSerializer(serializers.ModelSerializer):
myfield = serializers.ListField(child=serializers.CharField(), min_length=1)
def to_internal_value(self, data):
myfield_val = data.get('myfield')
output = super(MyModelSerializer, self).to_internal_value(data)
output['myfield'] = ','.join(myfield_val)
def to_representation(self, instance):
myfield_val = instance.myfield.split(',')
output = super(MyModelSerializer, self).to_representation(instance)
output['myfield'] = myfield_val
class Meta:
model = MyModel
fields = ('myfield')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句