我想在默认的django用户模型中使电子邮件字段唯一 . 所以我做到了 unique_together=[('email',)]
. 现在在序列化器中我希望它是一个read_only字段 . 但是Django Rest Framework 3.0文档说:
有一种特殊情况,其中只读字段是模型级别的unique_together约束的一部分 . 在这种情况下,序列化程序类需要该字段以验证约束,但用户也不应编辑该字段 . 处理此问题的正确方法是在序列化程序上明确指定字段,同时提供read_only = True和default = ...关键字参数 . 这方面的一个例子是与当前认证的用户的只读关系,该用户与另一个标识符是唯一的 . 在这种情况下,您将声明用户字段,如下所示:user = serializers.PrimaryKeyRelatedField(read_only = True,default = serializers.CurrentUserDefault())
serializers.CurrentUserDefault()表示当前用户 . 我想将默认设置为用户's email . Isn' t serializers.CurrentUserDefault()
等效于 request.user
. serializers.CurrentUserDefault().email
正在给出错误 'CurrentUserDefault' object has no attribute 'email'
如何将电子邮件默认设置为用户的电子邮件?
1 回答
这就是
CurrentUserDefault
的文档所说的:您可以这样做,也可以在
views
中提供context data
中传递的电子邮件ID . 覆盖函数get_serializer_context
在你的
views
. 你的view
应该从某个继承级别的GenericAPIView
扩展 . 现在在serializer
中,覆盖您的__init__
并获取您的电子邮件数据 .现在您可以在序列化程序中使用它 .