2015-05-05 51 views
0

使用Django Rest API框架,我想使用Angular js上傳單個項目的多個圖像。'dict'對象沒有屬性'pk'Django Rest API框架

這裏是我的模型:

class Project(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    owner = models.ForeignKey(User) 
    number_of_photos = models.IntegerField() 

class Photo(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    images = models.ImageField(upload_to='photos/', max_length=254) 
    project = models.ForeignKey(Project) 

我有這樣的序列化:

class ProjectSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Project 
     fields = ('id', 'created', 'number_of_photos', 'owner') 

    def create(self, validated_data): 
     project = Project.objects.create(**validated_data) 
     return project 

class UploadSerializer(serializers.ModelSerializer): 
    project = ProjectSerializer(many=True, read_only=True) 

    class Meta: 
     model = Photo 
     fields = ('url', 'created', 'images', 'project') 

在我看來,我得到這個我viewsets.ModelViewSet

serializer = UploadSerializer(data=photo_array, many=True, context={'request': request}) 

if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 

變量photo_array內包含:

[{'project':u'1','images':{u'name':u'test-image.png',u'lastModifiedDate':u'2015-04-22T08:51: 11.000Z',u'webkitRelativePath':u'',u'lastModified':1429692671000,u'type':u'image/png',u'size':43152}},{'project':u'1' ,'images':{u'name':u'test.png',u'lastModifiedDate':u'2015-04-08T08:35:17.000Z',u'webkitRelativePath':u'',u'lastModified' :1428482117000,u'type ':u'image/PNG',u'size':127433}}]

但它給我一個錯誤'字典' 對象有沒有屬性 'PK'

我的photo_array變量原因這個問題?

+0

如果您在帖子中包含錯誤追蹤,那將會非常有用。 –

回答

0

我想你應該更新id字段

+2

嗨partha,歡迎來到StackOverflow。您能否詳細解釋一下您的答案,或者添加代碼示例和解釋以幫助其他用戶瞭解爲什麼/如何解決問題? – Christina

+0

嗨partha謝謝你的答案。您的意思是將**'id'**添加到** UploadSerializer **?中的字段。 –

+0

使用project_id鍵代替項目「[{'project':u'1',」並讓m知道 – jatin

1

您UploadSerializer沒有回溯,我只能拿一個受過教育的猜測,什麼問題實際上是。

您使用的是標準ModelSerializer,您允許Django REST框架爲您生成字段。您可以通過打印的repr(UploadSerializer())輸出內省產生的場,但他們應該是這個樣子:

class UploadSerializer(ModelSerializer): 
    url = HyperlinkedIdentityField() 
    created = DateTimeField() 
    images = ImageField() 
    project = ProjectSerializer(many=True, read_only=True) 

    class Meta: 
     model = Photo 
     fields = ('url', 'created', 'images', 'project') 

隨着這些領域,將被傳遞迴從串行化應該是這個樣子

典型的字典
{ 
    "id": 1, 
    "url": "http://localhost:8000/api/photos/1/", 
    "created": "2015-04-22T08:51:11.000Z", 
    "images": "http://localhost:8000/media/test-image.png", 
    "project": { 
     "id": 1, 
     "created": "2015-04-22T08:51:11.000Z", 
     "number_of_photos": 1, 
     "owner": 1 
    } 
} 

你會發現,這是你逝去的東西完全不同。您傳遞,將匹配串看起來像

class UploadSerializer(ModelSerializer): 
    url = HyperlinkedIdentityField() 
    created = DateTimeField() 
    images = SomeCustomImageField() 
    project = PrimaryKeyRelatedField() 

    class Meta: 
     model = Photo 
     fields = ('url', 'created', 'images', 'project') 
01的數據

這樣做回答你的問題,二次

做了我photo_array變量的原因這個問題?

最有可能。現在,我實際上並不知道你的問題是什麼。它聽起來像你正在傳遞一個字典到PrimaryKeyRelatedField,但你的序列化程序實際上並不匹配。

相關問題