我正在将 User 对象序列化为 JSON,我想在 JSON 响应中指明序列化的用户是否与发出请求的用户是 friend 。
我在我的 User 模型中添加了一个 to_dict() 方法,该方法执行序列化对象所需的预处理 - 这将是添加指示友谊的属性的好地方,但由于 User.to_dict() 没有访问请求对象,我似乎无法在那里进行。
在 View 中执行此操作很容易,但我不想在其他 View 中重复该代码。我想将用户对象“升级”为请求感知用户对象。
django.contrib.auth User 模型有一个 is_authenticated 属性,它实际上是请求的属性而不是模型的属性——该属性仅在特定 Web 请求的上下文中有意义。
就好像我应该用 RequestUser 的一个实例替换 request.user,一个新的类,它接受一个 User 和一个 Request 并添加特定于请求的属性。有什么干净的方法可以做到这一点?
最佳答案
这并不能真正回答您的问题,但是您确定要通过 User 上的方法来处理友谊吗?我这样说是因为:
a.is_friend_with(b) == b.is_friends_with(a)
)。例如,如果您稍后想要缓存调用的结果,那么定义一个简单地接受用户对象作为任意排序参数的函数是有意义的;和,我的方法是在任何代表友谊的模型上定义一个管理器方法,并明确地将用户传递给它,如下所示:
Friendship.objects.are_friends(other_user, request.user)
.
关于django - 用特定于请求的属性装饰 Django 模型的干净方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215286/