Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Rest Framework : Serializer doesn't find attributes

Here is my model:

class Address(models.Model):
    """
        This is an Adress
    """
    address_complete = models.CharField(max_length=100)
    door_code       = models.CharField(max_length=20, blank=True, null=True)
    floor           = models.IntegerField(blank=True, null=True)
    infos           = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        verbose_name_plural = "Addresses"

I created a serializer for this in serializer.py:

from rest_framework import serializers
from party_app.models import Address, UserProfile, Stuff, Event, Bringing, Quantity


class AddressSerializer(serializers.Serializer):
    pk = serializers.Field()
    address_complete = serializers.CharField(max_length=100)
    door_code       = serializers.CharField(max_length=20)
    floor           = serializers.IntegerField()
    infos           = serializers.CharField(max_length=100)

    def restore_object(self, attrs, instance=None):
        """
            Create or update a new UserProfile instance.
        """
        if instance:
            # Update existing instance
            instance.address_complete = attrs.get('address_complete', instance.address_complete)
            instance.door_code = attrs.get('door_code', instance.door_code)
            instance.floor = attrs.get('floor', instance.floor)
            instance.infos = attrs.get('infos', instance.infos)
            return instance

        # Create new instance
        return Address(**attrs)

When I try to serialize an address using python manage?py shell, here is what I got:

>>> seria = AddressSerializer(Address)
>>> seria.data
AttributeError: type object 'Address' has no attribute 'address_complete'

Being new to DjangoRestFramework, I just don't know why I got this...

If you see something obvious, I would be glad to know it!!

like image 439
Alex Grs Avatar asked Jul 19 '26 17:07

Alex Grs


1 Answers

Get rid of restore_object as you are using a Model it's not needed. Use the modelSerializer instead.

class AddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = Address
        fields = ('id', 'address_complete', 'door_code')
like image 71
Glyn Jackson Avatar answered Jul 22 '26 14:07

Glyn Jackson



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!