python - 在 django 创建模板中创建对象时如何自动插入当前用户?
问题描述
我有一个文章数据库
User=models.ForeignKey(User,related_name="Company_Owner",
on_delete=models.CASCADE)
用户导入的地方如下:
from django.contrib.auth.models import User.
当特定用户提交文章时,我想将当前活动用户自动插入用户字段。
我在 django admin 中做到了这一点:
class companyAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'User', None) is None:
obj.User = request.user
obj.save()
但是只有当我登录到 django admin 时,超级用户才会改变,如果我从模板提交表单,它不会改变所有用户,它不会返回特定用户。
有人有什么建议吗?
解决方案
您可以覆盖ModelAdmin类的 get_changeform_initial_data :
def get_changeform_initial_data(self, request):
initial = {
'user': request.user
}
return initial
如果您愿意,还可以设置其他字段的初始值。只有在添加对象时才会调用此方法。在其实现中,默认是根据 GET 参数填充字段:
django.contrib.admin.options.py
def get_changeform_initial_data(self, request):
"""
Get the initial form data.
Unless overridden, this populates from the GET params.
"""
initial = dict(request.GET.items())
for k in initial:
try:
f = self.model._meta.get_field(k)
except FieldDoesNotExist:
continue
# We have to special-case M2Ms as a list of comma-separated PKs.
if isinstance(f, models.ManyToManyField):
initial[k] = initial[k].split(",")
return initial
编辑:如果你想在普通视图中实现它,你可以使用相同的逻辑。在这种情况下,您将像这样实例化 ModelForm:
form = ArticleForm(request.POST or None, initial={'user': request.user})
推荐阅读
- c# - dotnet core 3 上缺少 SqlException?
- angular - 如何只允许一个用户同时登录 Fire base Authentication 帐户?
- sql - 如何创建 SQL STATEMENT 来拆分日期并在日期之间添加字符串
- java - 如何使用两个数据模型在 RecyclerView 中创建多个视图类型?
- powershell - 连接到 Office 365 时无法显示特定属性
- python - 从烧瓶休息 API 返回 jsonify() 和返回 make_response 有什么区别?
- python - 如何使新页面在同一选项卡中打开。表单 POST 方法。烧瓶
- angular - 如何在同一个 Azure 应用服务中部署 Angular 应用和 Web API?
- javascript - 如何使用 node js 命令行运行多个 js 文件?
- c++ - 如何使用c ++从字符串中删除开头和后面的撇号