Итак, у меня есть модель со следующим атрибутом:
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 с помощью заголовка 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.hears как дополнительный контекст ...? Но я думаю, что если Accept-Language не установлен, et c? Я знаю, что это здесь:
request.headers['Accept-Language']
Итак, я думаю, что request.headers.get('Accept-Language', 'en-gb')
было бы приемлемо ...
Но тогда, что было бы лучшим способом затем установить атрибут в serialzier как это?
NB Я также считаю, что get_serializer_context()
может вернуть объект запроса?
Я также чувствую, что это может быть достаточно надежным:
data = request.POST.copy()
serializer = self.get_serializer(data=data.update({'locale': request.headers.get('Accept-Language', 'en')}))
Но так ли это «Хорошая практика»?
Мнения горячо приветствуются!