HyperlinkedIdentityField仅在用户模型上返回错误

时间:2015-09-05 15:42:11

标签: django django-rest-framework

我一直在我的许多序列化程序上使用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参数默认为使用pkuserprofile是默认用户模型的OneToOne。

我想知道它是否与Django的默认AnonymousUserpk -1有关,但我无法验证这一点。

非常感谢任何帮助。感谢

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字段中的连字符( - )。很简单,但起初对我来说并不是很明显。错误信息也没有任何帮助,这就是我很可能没有立即看到问题的原因。

嗯,我希望如果他们遇到同样的问题,这会有所帮助。