所以,我有一个具有以下属性的模型:
locale = models.CharField(max_length=10, choices=get_locale_choices(), default='en-gb')
此模型的关联序列化程序当前为:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
然后我调用一个创建端点:
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
我想知道,如何最好地修改上述内容以允许 MyModel 的 locale 属性由 Accept-Language 标头更新en-GB,en;q=0.5
。
我从 django.conf.locale.LANG_INFO 获得我的语言环境选择:
from django.conf.locale import LANG_INFO
def get_locale_choices():
return [(k, v['name']) for k, v in LANG_INFO.items() if 'name' in v]
我想我需要传入 request.headers 作为某种额外的上下文......?但我在想,如果没有设置 Accept-Language 等怎么办?我知道它在这里:
request.headers['Accept-Language']
所以,我想request.headers.get('Accept-Language', 'en-gb')
是可以接受的......
但是,那么在serialzier中设置属性的最佳方法是什么?
注意我也相信get_serializer_context()
可以返回请求对象?
我也觉得这可能足够强大:
data = request.POST.copy()
serializer = self.get_serializer(data=data.update({'locale': request.headers.get('Accept-Language', 'en')}))
但这是“好习惯”吗?
热烈欢迎意见!