Я использую Django 1.7.7 и Django Rest Framework 3.1.1.Ключевая ошибка в Django Rest Framework при использовании serializers.ChoiceField с кортежами
Когда я сериализации эту модель
class Question(models.Model):
QUESTION_TYPES = (
(10,'Blurb'),
(20,'Group Header'),
(21,'Group Footer'),
(30,'Sub-Group Header'),
(31,'Sub-Group Footer'),
(50,'Save Button'),
(100,'Standard Question'),
(105,'Text-Area Question'),
(110,'Multiple-Choice Question'),
(120,'Standard Sub-Question'),
(130,'Multiple-Choice Sub-Question')
)
type = models.IntegerField(default=100,choices=QUESTION_TYPES)
с помощью этого Viewset/сериалайзер:
class QuestionSerializer(serializers.ModelSerializer):
type = serializers.ChoiceField(choices='QUESTION_TYPES')
class Meta:
model = Question
class QuestionViewSet(viewsets.ModelViewSet):
model = Question
serializer_class = QuestionSerializer
def get_queryset(self):
return Question.objects.all()
Я получаю KeyError '10' (или любой другой QUESTION_TYPES ключ является первым сериализовать из вопросов Таблица).
ошибка, кажется, брошенные rest_framework/fields.py в to_representation возвратных self.choice_strings_to_values [six.text_type (значение)]
есть все, что очевидно, что я делаю неправильно? Есть ли проблема с использованием кортежей с serializer.ChoiceField?
Джон
Что о: 'ChoiceField (выбор = Вопрос. QUESTION_TYPES) '? – mariodev
Это имеет желаемый эффект, чтобы не выдавать ошибку, но она по-прежнему отображает ключ, а не текст, такой как «рекламный ролик». Я также попробовал 'type = serializers.CharField (source = 'get_type_display')', и пока он отображает текст правильно, а не ключ, он выглядит только для чтения. Я не могу, чтобы жизнь меня писала, даже если я пытаюсь написать ключ. – John