如何在django创建模板中创建对象时自动插入当前用户?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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.cont日本.admin.options.朋友

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})
另一答案

实际上没有什么需要做的。 request.user代表当前登录的用户。如果用户当前未登录,则将用户设置为AnonymousUser的实例。

只需编写特定用户提交文章的视图。

另一答案

得到答案 -

在我的观点中完成了类似的事情并且它起作用了---

  class group1CreateView(LoginRequiredMixin,CreateView):
     form_class  = group1Form
     template_name = "accounting_double_entry/group1_form.html"

     def form_valid(self, form):
        form.instance.User = self.request.user
        return super(group1CreateView, self).form_valid(form)

谢谢大家回复......这意味着很多......

以上是关于如何在django创建模板中创建对象时自动插入当前用户?的主要内容,如果未能解决你的问题,请参考以下文章

在具有空格的对象的 django 模板中创建超链接

如何在 Django 中创建自动递增整数字段?

如何在 Django 模板中创建正确的路径

在 django 中创建表单时对象不可调用错误

在 Django 模板中创建排序选项

如何在 django 模板中创建文件