2014-10-08 44 views
2

我對Django Rest Framework API相當陌生。 我正在關注Django-Rest-framework官方教程。 下面是(片段/ serializers.py)文件UserSerializer類的兩個版本。(片段是應用程序的名稱)Django Rest Framework中的「AttributeError」和PrimaryKeyRelatedField

class UserSerializer(serializers.ModelSerializer): 
    snippet = serializers.PrimaryKeyRelatedField(many=True) 

    class Meta: 
     model = User 
     fields = ('id', 'username','snippet') 

這將引發以下錯誤,當我嘗試接取這個網址。 網址:

http://127.0.0.1:8000/users/ 

錯誤:

AttributeError at /users/ 
type object 'User' has no attribute 'snippet' 

,當我寫了下面則有完全沒有錯誤。

class UserSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = User 
     fields = ('id', 'username',) 

它必須是PrimaryKeyRelatedField。請告訴我它是什麼。? 爲什麼它會影響結果。如果你發現我的問題很差,請不要降級並讓我知道。

回答

1

使用片段不片斷,與

class UserSerializer(serializers.ModelSerializer): 
    snippets = serializers.PrimaryKeyRelatedField(many=True) 

    class Meta: 
     model = User 
     fields = ('id', 'username','snippets') 
+0

我的應用程序名是snippet,不是snippets。 – Jay 2014-10-09 11:04:11

+0

它與應用程序名稱無關,它的所有關於相關名稱可以粘貼您的片段模型 – 2014-10-09 11:08:01

1

嘗試請看看你的片段/ models.py

owner = models.ForeignKey('auth.User', related_name='snippets') 

你錯過的東西是related_name說法。對相關模型ForeignKey的

class UserSerializer(serializers.ModelSerializer): 
    snippets = serializers.PrimaryKeyRelatedField(many=True) 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'snippets') 

related_name參數應符合你們倆「字段名」串行也是裏面的字段元組。

相關問題