Django POST IntegrityError
Я получил IntegrityError, когда я POST данные в /users/profiles. У меня только один экземпляр в модели Profile. И я отправляю другие данные. Я не могу понять, почему эти данные уже существуют... Вот мой код. И я поместил трассировку обратно после кода. models.py
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'phone_nm', 'login_ID', 'login_PW', 'age', 'gender', 'password']
class ProfileSerializer(serializers.ModelSerializer):
related_user = UserSerializer(read_only=True)
jobs = JobSerializer(required=False, many=True, allow_null=True, read_only=True)
class Meta:
model = Profile
fields = ['related_user_id', 'nickname', 'introduction', 'jobs', 'recomms_cnt', 'related_user']
def create(self, validated_data):
related_user_data = validated_data.pop('related_user')
related_user = User.objects.create(**related_user_data)
jobs_data = validated_data.pop('jobs')
# job_dic = {'job_name': j.job_name}
profile = Profile.objects.create(**validated_data,
related_user=related_user) # Direct assignment to the forward side of a many-to-many set is prohibited. Use jobs.set() instead.
profile.jobs.add(Job.objects.get(pk=1))
return profile
def validate(self, data):
if data.get('jobs', None) is None:
j = Job.objects.get(pk=1) # 의미없음(nothing)
return data
views.py
class ProfileList(APIView):
# 회원 조회
def get(self, request):
# 모든 profile 불러옴. ORM은 .all() 사용
profiles = Profile.objects.all()
serializer = ProfileSerializer(profiles, many=True)
return Response(serializer.data)
# 회원 가입
@csrf_exempt
def post(self, request):
data = request.data
serializer = ProfileSerializer(data=data, partial=True)
# jobs = serializer.data['jobs'] # list 형태?
# recomms = serializer.data['recomms'] # list형태?
if serializer.is_valid(raise_exception=ValueError):
serializer.validate(data)
serializer.create(validated_data=request.data)
return Response(serializer.data, status.HTTP_201_CREATED)
return Response(serializer.error_messages, status=status.HTTP_400_BAD_REQUEST)
traceback:
Значение исключения: дублирующее значение ключа нарушает уникальное ограничение "users_user_username_key" ПОДРОБНАЯ ИНФОРМАЦИЯ: Ключ (имя пользователя)=() уже существует.