【发布时间】:2015-10-04 00:33:54
【问题描述】:
这是我的 UserExtendedSerializer:
class UserExtendedSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(UserExtendedSerializer, self).__init__(*args, **kwargs) # call the super()
for field in self.fields: # iterate over the serializer fields
self.fields[field].error_messages['required'] = 'Enter a valid %s.'%field # set the custom error message
self.fields[field].error_messages['invalid'] = 'Select a valid %s.'%field # set the custom error message
class Meta:
model = UserExtended
fields = ('country',)
这是 UserExtended 模型:
class UserExtended(models.Model):
user = models.OneToOneField(User)
country = models.ForeignKey(Country)
现在,当我尝试在不输入有效国家/地区的情况下创建用户时,Django 会向前端提示错误“类型不正确。预期的 pk 值,接收列表”。此错误消息来自哪里?因为在我的 init 函数中,我将“无效”错误消息覆盖为“选择一个有效的国家。”,但这不是我收到的消息。
另外,我打开了shell并做了
repr(UserExtendedSerializer())
输出是:
UserExtendedSerializer():\n country = PrimaryKeyRelatedField(queryset.Country.objects.all())
所以这里也没有列出 Django 验证器。如何查看特定模型/模型序列化器字段的所有验证器?
【问题讨论】:
-
检查服务器中的错误。您的用户在其中一个字段上获得了一个列表,而不是外来对象的 pk。
-
@cdvv7788 这是一个 400 错误,这很好。由于最终用户的输入,它正在接收列表。我的问题不是错误消息本身,而是如何查看 Django 序列化程序/模型字段上的验证器列表?因为 "self.fields[field].error_messages['invalid'] = 'Select a valid %s.'%field" 没有覆盖错误消息,所以必须有另一个我没有看到的验证器(我最终想要覆盖验证器引发的错误消息,但我需要先找出错误消息的来源才能做到这一点)。
标签: django django-models django-rest-framework django-validation django-serializer