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 自定义错误消息?

重写 DeviceContactsave 方法,拦截异常,然后按您的喜好重新抛出怎么样?

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.'
)