DRF create работает, только если для сериализатора установлено значение (many=True)
У меня проблема с представлением запроса POST.
DRF выдаст ошибку атрибута, если я не установлю сериализатор (AnswerSurveySerializer) в значение (many=True), но я просто хочу опубликовать одну запись для поля, которое является чужим.
Ценю любые советы и спасибо заранее.
models.py
class Survey(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='surveys',
on_delete=models.CASCADE)
is_completed = models.BooleanField(default=False)
def __str__(self):
return self.status
class Answer(models.Model):
history = HistoricalRecords()
survey = models.ForeignKey(
Survey, related_name='answers', on_delete=models.CASCADE)
choice = models.ForeignKey(
Choice, related_name='answers', on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
serializers.py
class AnswerSurveySerializer(serializers.ModelSerializer):
class Meta:
model = models.Survey
fields = ('id',)
class AnswerSerializer(serializers.ModelSerializer):
survey = AnswerSurveySerializer(many=True)
class Meta:
model = models.Answer
fields = ('survey',)
views.py
class AddAnswerView(generics.CreateAPIView):
"""Handles creating answers to MCQ."""
serializer_class = AnswerSerializer
1 ответ
Решение
Проблема заключается в вашем __str__
метод Survey
модель. __str__
метод возвращает (пытается вернуть) атрибут status
, но Survey
класс модели не имеет status
,
Так что удалите __str__
метод из модели или изменить на что-то значимое, как,
class Survey(models.Model):
history = HistoricalRecords()
user = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='surveys',
on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
is_completed = models.BooleanField(default=False)
def __str__(self):
return self.is_completed