Как исправить "Поле сериализатора может быть названо неверно и не соответствовать ни одному атрибуту или ключу в экземпляре` Model` в DRF - PullRequest
0 голосов
/ 03 апреля 2019

Я использую Django Rest Framework и попытался добавить настраиваемое поле, которого нет в модели HPIQuestionBank, в файл serializers.py, и пока код такой, как показано ниже, но я получаю сообщение об ошибке. Я знаю, что checkboxes и checkboxValues не являются атрибутами модели, но моя цель состоит в том, чтобы сделать их custom fields где я ошибаюсь? answer_type - это настраиваемое поле, оно в порядке и работает правильно.

Got AttributeError when attempting to get a value for field `checkboxes` on serializer `TemplateQuestionBankSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `HPIQuestionBank` instance.
Original exception text was: 'HPIQuestionBank' object has no attribute 'checkboxes'.

сериализатору

class TemplateQuestionBankSerializer(serializers.ModelSerializer):
    answer_type = serializers.CharField(write_only=True)
    checkboxes = serializers.ListField(child=serializers.CharField(write_only=True))
    checkboxValues = serializers.ListField(child=serializers.CharField(write_only=True))

    class Meta:
        model = HPIQuestionBank
        fields = ['id','label','answer_type','checkboxes','checkboxValues']

модель

class HPIQuestionBank(models.Model):
    label = models.CharField(
        max_length=200,
        db_index=True,
        blank=True,
        null=True)
    template = models.ForeignKey(
        HPIFilter, blank=True, null=True, on_delete=models.CASCADE, default='')
    organization = models.IntegerField(blank=True, null=True)

1 Ответ

1 голос
/ 03 апреля 2019

В вашем определении поля сериализатора у вас есть

checkboxes = serializers.ListField(child=serializers.CharField(write_only=True))

Здесь вы определили дочерние поля как write_only , но не определили ListField таким образом, поэтому сериализатор пытаетсячтобы получить его значение при сериализации.Вам нужно определить эти поля как:

checkboxes = serializers.ListField(child=serializers.CharField(write_only=True), write_only=True)
checkboxValues = serializers.ListField(child=serializers.CharField(write_only=True), write_only=True)

Возможно, вам не нужно добавлять write_only в определения дочерних полей, но я не уверен в этом.

...