首页 > 解决方案 > 在 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 时,超级用户才会改变,如果我从模板提交表单,它不会改变所有用户,它不会返回特定用户。

有人有什么建议吗?

标签: pythondjangodjango-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})

推荐阅读