2013-02-24 40 views
3

这里是我的模型:Django的REST框架:串行未找到属性

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" 

我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) 

当我试图序列地址?使用python管理PY壳,这里是我的了:

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

作为新DjangoRestFramework,我只是不知道为什么我得到这个...

如果你看到明显的东西,我会很高兴知道它!

回答

3

摆脱restore_object,因为您使用的模型不是必需的。改为使用modelSerializer

class AddressSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Address 
     fields = ('id', 'address_complete', 'door_code') 
+1

我试过modelSerialiser,但这次我有“AttributeError:type object'Address''没有属性'id'” – 2013-02-25 18:23:14

+1

你是否缺少ID?见上面 – 2013-02-25 22:34:33

+2

那么你帮了我很多。你的解决方案正在工作但我真正的错误是一个'小白'之一:我做了一个seria = AddressSerializer(地址),而不是一个seria = AddressSerializer(地址)(基本上我试图序列化模型,而不是模型中的对象...) – 2013-02-26 08:35:48