Добавить дополнительное поле в ModelSerializer

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Я хочу создать приложение для викторины, и у меня есть две модели, которые выглядят так:

 class Question(models.Model):
 question = models.CharField(max_length=100)

class Answer(models.Model):
 answer = models.CharField(max_length=30)
 is_true = models.BooleanField(default=False)
 question = models.ForeignKey(Question, on_delete=models.CASCADE)
 

Теперь я хочу создать ModelSerializer, который содержит вопрос и связанные с ним ответы. Что-то вроде этого:

 [
 {
   'question': 'Something',
   'answers': [
     'something1', 'something2', 'something3' 
    ]
 }
]
 

Проблема, с которой я сталкиваюсь, заключается в том, что внешний ключ находится в модели ответа, а не в модели вопроса.

Как я могу добавить Answers в Question модель? Спасибо

Ответ №1:

Вероятно, лучше переименовать отношение в обратном порядке с answer_set на answers , это делает его более согласованным между сериализаторами и моделями:

 class Answer(models.Model):
    answer = models.CharField(max_length=30)
    is_true = models.BooleanField(default=False)
    question = models.ForeignKey(
        Question,
        on_delete=models.CASCADE,
        related_name='answers'
    ) 

Вы можете сериализовать ответы с помощью SlugRelatedField [drf-doc]:

 class QuestionSerializer(serializers.ModelSerializer):
    answers = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field='answer'
     )

    class Meta:
        model = Question
        fields = ['question', 'answers']