Django模型:如何在视图函数中检索自定义错误消息?

时间:2019-02-14 11:49:20

标签: python django django-rest-framework

我有一个模型UserProfile:

class UserProfile(models.Model):

    class Meta:
        db_table = 't_user_profile'

    display_name = models.CharField(
        max_length=20,
        unique=True,
        error_messages={
            'unique': ("A user with that display name already exists."),
        },
        blank=True
    )

我有一个查看功能:

@csrf_exempt
def change_display_name(request):

    data = json.loads(request.body.decode('utf-8'))
    display_name = data.get('displayName')

    try:
        user_profile = UserProfile.objects.get(id=2)

    except UserProfile.DoesNotExist:
        return JsonResponse({'error': 'User does not exist.'}, safe=False)

    user_profile.display_name = display_name
    user_profile.save()

    return JsonResponse({'status': 'SUCCESS'}, safe=False)

除了唯一的display_name之外,如何尝试在JSON中返回我在模型中设置的自定义错误消息?

2 个答案:

答案 0 :(得分:0)

您要处理UNIQUE intergrityError吗?参见this question

答案 1 :(得分:0)

保存之前,您需要运行验证。这是一个基于https://demos.telerik.com/kendo-ui/treeview/templates的示例:

from django.core.exceptions import ValidationError

user_profile.display_name = display_name

try:
    user_profile.full_clean()
except ValidationError as e:
    # Do something based on the errors contained in e.message_dict.
    return JsonResponse({'error': 'Some error message.'}, safe=False)

user_profile.save()

如果由于某种原因您不想进行完全验证,则可以使用user_profile.validate_unique()而不是full_clean()来检查唯一性约束。了解更多documentation