2021年3月21日星期日

Django serilizator object updating problem

I would like to ask where it could be a problem with my serializer or using it. I want to update serialized data inside object personal info but it keeps throwing me an error:

Traceback (most recent call last):    File "C:\School\LS_2020_2021\MTAA\app\backend\env\lib\site-packages\django\core\handlers\exception.py", line 47, i  n inner      response = get_response(request)    File "C:\School\LS_2020_2021\MTAA\app\backend\env\lib\site-packages\django\core\handlers\base.py", line 181, in _g  et_response      response = wrapped_callback(request, *callback_args, **callback_kwargs)    File "C:\School\LS_2020_2021\MTAA\app\backend\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in  wrapped_view      return view_func(*args, **kwargs)    File "C:\School\LS_2020_2021\MTAA\app\backend\env\lib\site-packages\django  \views\decorators\csrf.py", line 54, in wrapped_view      return view_func(*args, **kwargs)    File "C:\School\LS_2020_2021\MTAA\app\backend\cryptoeasy\api\views.py", line 45, in register      personal_info.save()    File "C:\School\LS_2020_2021\MTAA\app\backend\cryptoeasy\api\views.py", line 45, in register      personal_info.save()    File "C:\School\LS_2020_2021\MTAA\app\backend\cryptoeasy\api\views.py", line 45, in register      personal_info.save()    File "C:\School\LS_2020_2021\MTAA\app\backend\cryptoeasy\api\views.py", line 45, in register      personal_info.save()    File "C:\School\LS_2020_2021\MTAA\app\backend\env\lib\site-packages\rest_framework\serializers.py", line 200, in s  ave      self.instance = self.update(self.instance, validated_data)    File "C:\School\LS_2020_2021\MTAA\app\backend\cryptoeasy\api\serializers.py", line 48, in update      instance.user = attrs.get('user', instance.user)  AttributeError: 'PersonalInfoSerializer' object has no attribute 'user'  

Here's my model PersonalInfo:

class PersonalInfo(models.Model):      user = models.ForeignKey('User', models.DO_NOTHING, db_column='user', blank=True, null=True)      firstname = models.CharField(max_length=255)      lastname = models.CharField(max_length=255)      card_id = models.CharField(unique=True, max_length=255)      street = models.CharField(max_length=255)      postal_code = models.IntegerField()      city = models.CharField(max_length=255)      photo = models.BinaryField(blank=True, null=True)      debet_card_number = models.CharField(max_length=16)      created_at = models.DateTimeField()      last_update = models.DateTimeField()        class Meta:          managed = False          db_table = 'Personal_info'  

Here's my serializer class:

class PersonalInfoSerializer(serializers.Serializer):      user = serializers.IntegerField(required=False)      firstname = serializers.CharField(max_length=255)      lastname = serializers.CharField(max_length=255)      card_id = serializers.CharField(max_length=255)      street = serializers.CharField(max_length=255)      postal_code = serializers.IntegerField()      city = serializers.CharField(max_length=255)      debet_card_number = serializers.CharField(max_length=16)      created_at = serializers.DateTimeField(required=False)      last_update = serializers.DateTimeField(required=False)        def create(self, validated_data):          return PersonalInfo.objects.create(**validated_data)        def update(self, instance, attrs):          print("instance", attrs.get('user', instance.user))          instance.user = attrs.get('user', instance.user)          instance.save()          return instance  

And here is my view function that is updating my deserilized object:

json = BytesIO(request.body)  data = JSONParser().parse(json)  data.update({'created_at': datetime.datetime.now(tz=timezone.utc), 'last_update': datetime.datetime.now(tz=timezone.utc), 'last_login': datetime.datetime.now(tz=timezone.utc), 'token':generate_key()})  user = UserSerializer(data=data)  personal_info = PersonalInfoSerializer(data=data)      if user.is_valid() and personal_info.is_valid():        if user_exists(data["email"]):          response = {'Failed': 'email is already used'}          return JsonResponse(response)        elif card_exists(data["card_id"]):          response = {'Failed': 'card id is already used'}          return JsonResponse(response)        else:          user.save()          personal_info = PersonalInfoSerializer(personal_info, {'user':10}, partial=True)          personal_info.is_valid()          personal_info.save()  

I think the main problem is calling serializer update but I tried everything :/ Thank you for help :)

https://stackoverflow.com/questions/66739161/django-serilizator-object-updating-problem March 22, 2021 at 09:06AM

没有评论:

发表评论