问题描述
我在我的 Django 应用程序中在 User
或 filter
查询中使用了用户模型 create
:
# FILTER queries
self_posts = (
Post.objects
.prefetch_related('stage')
.filter(Q(stage__assignee__isnull=False,stage__assignee=request.user))
.exclude(stage__slug__in=['vault','published'])
)
...
# CREATE one
if form.is_valid():
post = form.save(commit=False)
post.editor = request.user
post.save()
然后我将我的应用程序打包到可重复使用的 Django 模块中。由于我的 User 与标准 Django 相比有几个额外的字段和方法,我创建了一个代理模型。在我的包中,它指向我的本地代理模型,但可以访问由主应用程序身份验证系统提供的实际“全局”用户:
class User(UserModel): # Proxy user model in packaged app
class Meta:
proxy = True
class Meta:
permissions = (
("manage_authors","Can manage authors"),)
...
因此,在我打包的应用视图中,我无法将 request.user
直接分配给类似 User
的字段,但仍然可以在过滤查询中使用。
(Pdb) request.user
<SimpleLazyObject: <User: koowpjcs>>
(Pdb) request.user.user
<User: John Doe>
因此,Post.objects.filter(foo=request.user)
仍然有效,但 post.editor = request.user
将失败:
Cannot assign "<SimpleLazyObject: <User: koowpjcs>>": "Post.editor" must be a "User" instance.
- 为什么会这样?是与可重复使用的应用有关还是与定义自定义代理模型有关?
- 在可重复使用的应用中将
request.user
的所有调用替换为request.user.user
是否正确?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)