Django Rest Framework中的“AttributeError”和PrimaryKeyRelatedField

时间:2014-10-08 10:45:02

标签: django django-rest-framework

我是Django Rest Framework API的新手。 我正在关注Django-Rest-frameworks官方教程。 以下是来自(snippet / serializers.py)文件的两个版本的UserSerializer类。(片段是应用程序名称)

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有关。请告诉我它是什么。 为什么它会影响结果。如果你发现我的问题很糟糕,请不要让它降级并让我知道。

3 个答案:

答案 0 :(得分:1)

使用代码段不是代码段,请尝试使用

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

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

答案 1 :(得分:1)

请查看您的代码段/ models.py

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

你错过的是related_name参数。

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

    class Meta:
        model = User
        fields = ('id', 'username', 'snippets')
相关模型上的

related_name参数ForeignKey应该与序列化程序的“字段名称”匹配,也可以在字段元组内。

答案 2 :(得分:0)

这是另一种方法

class snippetSerializer(serializers.PrimaryKeyRelatedField, serializers.ModelSerialier):
    class Meta:
       model = Snippet
       fields = '__all__'



class UserSerializer(serializers.ModelSerializer):
   snippets = snippetSeriazlier(many=True, queryset=Snippet.objects.all())

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