1. ホーム
  2. ジャンゴ

Django REST Framework の post_create を使用する際のエラー django.db.utils.IntegrityError.Django.db.utils.IntegrityError.Django.db.utils.IntegrityError: UNIQUE 制約に失敗しました。

2022-03-02 03:56:03

このエラーの原因は

def perform_create(self, serializer):
    instance = serializer.save(user=self.request.wxuser)
    return instance

上記のコードが示すように、この方法でユーザーを設定しようとすると、保存されたオブジェクトがユーザーと1対1の関係を持っている場合、ユーザーが既にオブジェクトと関連付けられているときに再度保存を行うと、Unique constraint failedというエラーが報告されます。

解決策は

チェックサムのレイヤーを追加して、例外を投げる

def perform_create(self, serializer):
    queryset = BusinessCard.objects.filter(user=self.request.wxuser)
    if queryset.exists():
        raise ValidationError('business card already exists')
    instance = serializer.save(user=self.request.wxuser)
    return instance