是否可以使用create_object视图创建新对象并自动将request.user作为外键?
PE:
class Post(models.Model):
text = models.TextField()
author = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
我想要的是使用create_object并使用request.user填充作者.
从很多方面来说,解决这个问题的所有解决方案都会带来更多的麻烦,而不是其价值。这属于黑客行为。如果 django 更新改变了 create_update 的实现方式,则可能会让您陷入困境。为了简单起见,我假设您正在尝试设置默认用户,而不是默默地强制该用户成为登录用户。
编写一个上下文处理器:
from django.views.generic.create_update import get_model_and_form_class
def form_user_default(request):
if request.method == 'GET':
model, custom_form = get_model_and_form_class(Post,None)
custom_form.author = request.user
return {'form':custom_form}
else: return {}
Run Code Online (Sandbox Code Playgroud)
这将覆盖 create_update 传递给模板的表单对象。从技术上讲,它的作用是在默认视图完成后重新创建表单。
然后在你的网址配置中:
url(r'pattern_to_match', 'django.views.generic.create_update.create_object', kwargs={'context_processors':form_user_default})
Run Code Online (Sandbox Code Playgroud)
同样,我必须深入研究源代码才能弄清楚如何做到这一点。最好尝试编写自己的视图(但要包含尽可能多的 Django 自定义对象)。没有“简单的默认”方法可以做到这一点,因为在 django 范式中,表单与模型层的联系比与视图的联系更紧密,并且只有视图才知道请求对象。