Django Rest Framework - 非字段错误自定义消息
Django Rest Framework - Non Field Error Custom Message
我查看了 this question,但这并没有真正告诉我非现场错误。
我的模特是:
class DeviceContact(models.Model):
created = models.DateTimeField(auto_now_add=True)
contact_sid = models.CharField(max_length=75, db_index=True)
contact_name = models.CharField(max_length=200)
contact_email = models.CharField(max_length=250, db_index=True)
contact_type = models.CharField(max_length=200, default='mobile')
class Meta:
unique_together = ("contact_sid", "contact_email", "contact_name")
class DeviceContactSerializer(serializers.ModelSerializer):
class Meta:
model = DeviceContact
fields = ('contact_sid', 'contact_name', 'contact_email', 'contact_type')
如何在 unique_together
条件失败时 return 自定义错误消息?
重写 DeviceContact
的 save
方法,拦截异常,然后按您的喜好重新抛出怎么样?
class MySuperDuperException(Exception):
pass
class DeviceContact(models.Model):
[...]
def save(self, *args, **kwargs):
try:
super(DeviceContact,self).save(*args,**kwargs)
catch DeviceContact.IntegrityError as e:
throw MySuperDuperException()
当您在模型上设置 unique_together
时,序列化程序将自动 generate a UniqueTogetherValidator
that is used 检查它们的唯一性。您可以通过查看序列化程序的输出并检查 Django REST 框架自动生成的内容来确认这一点:
print(repr(DeviceContractSerializer()))
然后您可以更改 validators
设置为包含您的自定义 UniqueTogetherValidator
和自定义 message
参数设置。
UniqueTogetherValidator(
queryset=DeviceContract.objects.all(),
fields=('contact_sid', 'contact_email', 'contact_name', ),
message='This was not a unique combination within the system, pick a different one.'
)
我查看了 this question,但这并没有真正告诉我非现场错误。
我的模特是:
class DeviceContact(models.Model):
created = models.DateTimeField(auto_now_add=True)
contact_sid = models.CharField(max_length=75, db_index=True)
contact_name = models.CharField(max_length=200)
contact_email = models.CharField(max_length=250, db_index=True)
contact_type = models.CharField(max_length=200, default='mobile')
class Meta:
unique_together = ("contact_sid", "contact_email", "contact_name")
class DeviceContactSerializer(serializers.ModelSerializer):
class Meta:
model = DeviceContact
fields = ('contact_sid', 'contact_name', 'contact_email', 'contact_type')
如何在 unique_together
条件失败时 return 自定义错误消息?
重写 DeviceContact
的 save
方法,拦截异常,然后按您的喜好重新抛出怎么样?
class MySuperDuperException(Exception):
pass
class DeviceContact(models.Model):
[...]
def save(self, *args, **kwargs):
try:
super(DeviceContact,self).save(*args,**kwargs)
catch DeviceContact.IntegrityError as e:
throw MySuperDuperException()
当您在模型上设置 unique_together
时,序列化程序将自动 generate a UniqueTogetherValidator
that is used 检查它们的唯一性。您可以通过查看序列化程序的输出并检查 Django REST 框架自动生成的内容来确认这一点:
print(repr(DeviceContractSerializer()))
然后您可以更改 validators
设置为包含您的自定义 UniqueTogetherValidator
和自定义 message
参数设置。
UniqueTogetherValidator(
queryset=DeviceContract.objects.all(),
fields=('contact_sid', 'contact_email', 'contact_name', ),
message='This was not a unique combination within the system, pick a different one.'
)