django - 可重复使用的 Django 应用程序中的 SimpleLazyObject 而不是 User?
问题描述
User
我在我的 Django 应用程序中使用了用户模型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 模块。由于与标准 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
重用应用程序中的所有调用是否正确?
解决方案
我认为该语句post.editor = request.user
不会失败,因为它是 Django 如何与登录用户一起工作的
无论如何,您可以将整数值分配为目录
post.editor_id = request.user.id
推荐阅读
- controller - 在 Hybris 中扩展控制器加速器服务
- c++ - 两台不同机器之间通过 wifi 进行 C++ Socket 通信
- python - pygame,如何让我的游戏中的分数在循环内只添加一次?
- karate - 空手道:将 JSCH 类与空手道框架集成
- python - For 循环遍历 DataFrame Python 的函数
- javascript - geocoder.geocode 响应延迟导致麻烦
- android - 由于可变值kotlin,如何更新recyclerView列表?
- node.js - 删除引用节点 JS
- php - 摆脱 php 数组中的幻数
- python - 通过python脚本登录mt4账号