如何修复"序列化程序字段可能命名不正确,并且与DRF中'Model'实例上的任何属性或键都不匹配



我正在使用 Django Rest 框架,我试图将HPIQuestionBank模型中不存在的自定义字段添加到 serializers.py 文件中,到目前为止,代码如下,但我得到和错误。我知道checkboxescheckboxValues不是模型的属性,但我的目标是使它们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)

在序列化程序字段定义中,您有

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,但我不确定。

相关内容

最新更新