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

时间:2018-09-08 12:32:51

标签: python django django-admin

我有一个包含

的文章数据库
 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时,超级用户才会更改,如果我从模板提交表单,则不会为所有用户更改,它不会返回特定用户。

有人有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您可以覆盖ModelAdmin类的 get_changeform_initial_data

var pattern = /^.*?:.*?$/gm;

如果愿意,您还可以设置其他人的字段的初始值。仅在添加对象时调用此方法。在其实现中,默认设置是根据GET参数填充字段:

django.contrib.admin.options.py

def get_changeform_initial_data(self, request):
    initial = {
        'user': request.user
    }

    return initial

编辑:如果要在普通视图中实现此逻辑,则可以使用相同的逻辑。在这种情况下,您可以像这样实例化ModelForm:

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

答案 1 :(得分:-1)

实际上,无需执行任何操作。 request.user代表当前登录的用户。如果该用户当前尚未登录,则该用户将被设置为AnonymousUser的实例。

只需在特定用户提交文章的地方写上视图。

答案 2 :(得分:-1)

得到答案-

在我看来做这样的事情很有效---

  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)

谢谢大家的回复...这很重要...