我一直在我的许多序列化程序上使用HyperlinkedIdentityField
,但是,当我尝试在默认的Django User
模型上使用它时,我收到错误。
class UserSerializer(serializers.ModelSerializer):
userprofile = serializers.HyperlinkedRelatedField(
many=False, view_name='user-profile-detail', read_only=True)
uri = serializers.HyperlinkedIdentityField(
view_name='user-detail')
class Meta:
model = User
fields = ('id', 'username', 'password', 'first_name', 'last_name',
'email', 'is_active', 'is_staff', 'is_superuser',
'last_login', 'date_joined', 'userprofile', 'uri',)
read_only_fields = ('id', 'last_login', 'date_joined',)
extra_kwargs = {'password': {'write_only': True}}
我得到的错误是:
Exception Type: ImproperlyConfigured
Exception Value: Could not resolve URL for hyperlinked relationship using view name
"user-detail". You may have failed to include the related model in
your API, or incorrectly configured the `lookup_field` attribute
on this field.
user-detail
名称确实存在,并且可以在引用该用户的其他表上正常运行。 lookup_field
参数默认为使用pk
。 userprofile
是默认用户模型的OneToOne。
我想知道它是否与Django的默认AnonymousUser
有pk
-1
有关,但我无法验证这一点。
非常感谢任何帮助。感谢
答案 0 :(得分:2)
好的,在我发布问题几秒钟之后,经过几周的努力,我意识到问题是什么。我认为这与AnonymousUser
pk
-1
有关,这是正确的。我的原始网址格式为:
url(r'user/(?P<pk>\d+)/$', 'user_detail', name='user-detail'),
但将其更改为:
url(r'user/(?P<pk>[-\d]+)/$', 'user_detail', name='user-detail'),
修复了问题。我不允许pk
字段中的连字符( - )。很简单,但起初对我来说并不是很明显。错误信息也没有任何帮助,这就是我很可能没有立即看到问题的原因。
嗯,我希望如果他们遇到同样的问题,这会有所帮助。