postman으로 update하려고 하는데 계속 user 필드가 빠져있는 것처럼 보인다
debug 돌려보면서
def put(self, request, pk, format=None):
user_profile = self.get_object(pk)
data = request.data
#data['user'] = request.user
# data['user'] = pk
# print("data: ", data)
serializer = UserProfileSerializer(user_profile, data=data)
# print(serializer)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
if serializer.is_valid():
이부분 에서 계속 error 발생하길래
def update(self, instance, validated_data):
# instance.user = User.objects.get(
# pk=validated_data.get('pk', instance.pk)
# )
print('validated_data', validated_data)
print(validated_data.get('job', instance.job))
try:
instance.job = validated_data.get('job', instance.job)
except Exception as ex:
print('에러 발생, job ', ex)
try:
instance.job = validated_data.get('job', instance.job)
except Exception as ex:
print('에러 발생, job ', ex)
try:
instance.sex = validated_data.get('sex', instance.sex)
except Exception as ex:
print('에러 발생 sex', ex)
try:
instance.phone_number = validated_data.get('phone_number', instance.phone_number)
except Exception as ex:
print('에러 발생 phone_number', ex)
try:
instance.address = validated_data.get('address', instance.address)
except Exception as ex:
print('에러 발생 address', ex)
try:
instance.recent_attend_date = validated_data.get('recent_attend_date', instance.recent_attend_date)
except Exception as ex:
print('에러 발생 recent_attend_date', ex)
# try:
#
# instance.email_confirmed = validated_data.get('email_confirmed', instance.email_confirmed)
# except Exception as ex:
# print('에러 발생 email_confirmed', ex)
instance.save()
return instance
여기서 에러가 생긴줄 알았는데
class UserProfileSerializer(serializers.Serializer):
user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
job = serializers.CharField(required=False, max_length=50,
allow_null=True, allow_blank=True, default='정보없음')
sex = serializers.ChoiceField(choices=UserProfile.SEX, default='Male')
phone_number = serializers.CharField(validators=[validate_international_phonenumber], allow_blank=True,
allow_null=True, required=False)
age = serializers.IntegerField(allow_null=True, required=False, default=20)
address = serializers.CharField(max_length=255, allow_null=True,
allow_blank=True, default='정보없음')
email_confirmed = serializers.BooleanField(default=False)
recent_attend_date = serializers.DateField(
default=datetime.date.today,
format='%Y-%m-%d',
input_formats=['%Y-%m-%d', 'iso-8601']
)
PrimaryKeyRelatedField 여기 user.id를 안 넣어줘서 생긴문제
차후에 로그인 후 request.user로 잡아줄 거니까 문제 될꺼 없지만
이런 문제가 발생했었다.
request.data['uesr'] = user.id
요런식으로 추가해서 해결해줬다.!!