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