Sim*_*oV8 2 django json choicefield django-serializer django-rest-framework
我正在 DRF 中使用ModelViewSet和实现一些 REST API ModelSerializer。我所有的 API 都使用 JSON 格式,我的一些模型使用 ChoiceField 字段,如下所示:
MyModel(models.Model):
KEY1 = 'Key1'
KEY2 = 'Key2'
ATTRIBUTE_CHOICES = (
(KEY1, 'Label 1'),
(KEY2, 'Label 2'))
attribute = models.CharField(max_length=4,
choices=ATTRIBUTE_CHOICES, default=KEY1)
Run Code Online (Sandbox Code Playgroud)
我的问题是,默认情况下,DRF 总是返回(并接受)JSON 消息的这些选项的键(请参阅此处),但我想改用标签,因为我认为更一致和更清楚谁将使用那些 API。有什么建议吗?
我找到了一个可能的解决方案,即定义我自己的领域如下:
class MyChoiceField(serializers.ChoiceField):
def to_representation(self, data):
if data not in self.choices.keys():
self.fail('invalid_choice', input=data)
else:
return self.choices[data]
def to_internal_value(self, data):
for key, value in self.choices.items():
if value == data:
return key
self.fail('invalid_choice', input=data)
Run Code Online (Sandbox Code Playgroud)
它的工作方式与 to 相同ChoiceField,但返回并接受标签而不是键。
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |