简体   繁体   中英

Object of type Email is not JSON serializable, How to create or update Django model object

I'm trying to build an object from my Email model, if the 'user_email' which is a user_email = models.CharField(primary_key=True, max_length=200) already exists just update it, if it doesn't exist create a new one I show you how I create my new object.

I get the following error:

TypeError: Object of type Email is not JSON serializable

My models.py extract:

class Email(models.Model):
    user_email = models.CharField(primary_key=True, max_length=200)
    user_phone_number = models.IntegerField()
    user_device_id = models.CharField(max_length=200)#request.META.get('HTTP_DEVICE', '')
    lat = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
    lng = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
    user_address = models.CharField(max_length=200)
    creation_date = models.DateTimeField(default=None)
    email_status = models.BooleanField(default=False)
    email_score = models.IntegerField()
    valid_email = models.BooleanField(default=False)
    fraud = models.BooleanField(default=False)

My views.py extract: class UserListView(APIView): serializer_class = EmailSerializer queryset = Email.objects.all() pagination_class = StandardResultsSetPagination

    def get_serializer_class(self):
        if self.action == 'list':
            return EmailListSerializer
        return EmailSerializer
    
    def post(self, request, *args, **kwargs):
        parametros = request.POST
        email='email=' + request._full_data['user_email']
        response = UserConnector(email).get_user_data()
        obgs = response[1]['results']
        if len(obgs) == 0:
            user_email = self.request.POST.get('user_email')
            email_stat = ''
            email_scor = ''
            email_valid = ''
            frau = ''
        else:
            obg = response[1]['results'][0]

            user_email = self.request.POST.get('user_email')
            email_stat = obg.get('email_status')
            email_scor = obg.get('email_score')
            email_valid = obg.get('valid_email')
            frau = obg.get('fraud')

        NewEmail = Email(
            user_email = user_email,
            user_phone_number = self.request.POST.get('user_phone_number'),
            user_device_id = request.META.get('HTTP_DEVICE', ''),
            lat = self.request.POST.get('lat'),
            lng = self.request.POST.get('lng'),
            user_address = self.request.POST.get('user_address'),
            creation_date = timezone.now,
            email_status = email_stat,
            email_score = email_scor,
            valid_email = email_valid,
            fraud = frau
        )
        return Response(NewEmail)

I create the NewEmail Object which is an instance for the Email model, then I want to do NewEmail.save() and return Response(NewEmail) for DRF to return the JSON of the created or updated object.

Instance (NewEmail) cannot be passed in the Response directly. You first need to save that instance ie NewEmail.save() and then pass that instance to your EmailSerializer serializer. And then pass that serialized response in Response.

NewEmail.save()

serializer = EmailSerializer(NewEmail)

return Response(serializer.data)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM