2016-05-28 2 views
2

Я подаю сериализованные данные из рамки Django rest на сводную таблицу Javascript на моем сайте. Если у меня есть переменная с именем «created_on», DRF использует это как имя поля. То, что я хочу отобразить в сводной таблице, - это метка, которая будет преобразована в «Создана».Изменение имени поля при использовании рамки для отдыха Django

В качестве примера, мой выход из ФПИ является следующее:

[{"created_on": "2016-04-23"}, {"created_on": "2016-05-23"}] 

Что я хочу:

[{"Created on": "2016-04-23"}, {"Created on": "2016-05-23"}] 

Возможно ли это без меня перекрывая процесс сериализации?

+0

Возможный дубликат http://stackoverflow.com/questions/22958058/how-to-change-field-name-in-django-rest-framework – solarissmoke

+1

Этот вопрос несколько отличается. Имя поля будет по-прежнему иметь меньшие буквы и содержать символы подчеркивания, если я последую этому подходу – Johan

+0

нет, это не будет. Вы можете определить свое альтернативное имя как угодно. Но если вы захотите, вы также можете переопределить объект Response, прежде чем возвращать его в 'perform_create' –

ответ

5

No, его невозможно (в настоящее время) без переопределения процесса сериализации.

Почему это невозможно?

Это происходит потому, что альтернативное имя, которое вы хотите использовать для created_on содержит пробельные и его не представляется возможным определить поле в вашем сериализатору имея пробельные в нем. Кроме того, в настоящее время нет возможности предоставлять альтернативное имя для поля, которое будет использоваться в процессе сериализации.

Возможное решение:

Вы можете переопределить метод to_representation() вашего сериализатором и там добавить Created On ключ, имеющий значение, равное значению created_on ключа. Затем все сериализованные объекты будут содержать ключ Created On.

class MySerializer(serializers.ModelSerializer): 

    ... 

    def to_representation(self, obj): 
     primitive_repr = super(MySerializer, self).to_representation(obj) 
     primitive_repr['Created On'] = primitive_repr['created_on'] 
     return primitive_repr 

Что делать, если альтернативное имя не содержит каких-либо пробелов?

Если альтернативное имя не содержало пробелов между ними, вы могли бы использовать SerializerMethodField() с аргументом source.

Вы могли бы сделать что-то вроде:

class MySerializer(serializers.ModelSerializer): 

    alternate_name = serializers.SerializerMethodField(source='created_on') 

    class Meta: 
     model = MyModel 
     fields = (.., 'alternate_name') 
Смежные вопросы