【问题标题】:Get current user in Django admin在 Django admin 中获取当前用户
【发布时间】:2013-11-02 18:04:23
【问题描述】:

我有一个可以在网站或管理面板中访问的发布对象。在这两种情况下,当用户发布帖子时,用户会自动分配给帖子。在网站区域,它工作正常。但是,它在管理区域中不起作用。首先,我尝试在那里输入表单。当我尝试保存对象并将输入留空时,它告诉我表单没有价值。然后,尝试查看我是否只是输入了一个随机值并查看它是否被覆盖,我这样做了。但是,该随机值并未被当前用户覆盖。如果我排除了该字段,当我尝试保存模型时,我会收到一个完整性错误,指出字段作者“可能不是 NULL”,所以我假设我的 save_model() 函数根本没有正确触发。现在我使用的代码我已经在互联网上看到了,人们声称它可以工作,我不知道它现在是坏了还是什么。这是我的代码:

from django.contrib import admin
from posting.models import Posting, Categories

class PostingAdmin(admin.ModelAdmin):
    list_display = ("title","author", "article","date")
    exclude = ('author',)
    fieldsets = (
        (None, {
            'fields': ('title',)
        }),
        ('Body', {
            'fields': ('article',)
            }),
    )

    def save_model(self,request,form,obj,change):
        print 'ENTERING SAVE_MODEL FUNCTION'
        if not change:
            obj.author = request.user
            print 'OBJ.AUTHOR:' + str(obj.author)
        obj.save()
        print "EXITING SAVE_MODEL FUNCTION"
admin.site.register(Posting, PostingAdmin)

【问题讨论】:

    标签: django django-models django-forms django-admin


    【解决方案1】:

    我添加此信息仅供参考,因为我遇到了这篇文章,这让我更深入地了解了我遇到的类似问题...
    要从“请求”数据预填充 Django 1.11 中的管理字段,请参见下面的模型“用户”字段的示例,该示例已使用登录用户预填充:

    admin.py

    class PostingAdmin(admin.ModelAdmin):
    
      def get_changeform_initial_data(self, request):
        return {'user': request.user}
    

    这会在首次保存之前添加新的“发布管理员”(模型实例)时填充该字段。

    【讨论】:

    • 这简单而精彩!现在是 2020 年,它正在发挥作用!
    【解决方案2】:

    您可以通过将请求添加为新创建的表单类的属性来覆盖 ModelAdmin.get_form。

    class EntryAdmin(admin.ModelAdmin):
        form = EntryAdminForm
    
        def get_form(self, request, *args, **kwargs):
            form = super(EntryAdmin, self).get_form(request, *args, **kwargs)
            form.request = request
            return form
    

    【讨论】:

      【解决方案3】:

      这对我有用:

      from django.contrib import admin
      from page.models import Page
      
      class PageAdmin(admin.ModelAdmin):
          def get_form(self, request, *args, **kwargs):
              form = super(PageAdmin, self).get_form(request, *args, **kwargs)
              form.base_fields['author'].initial = request.user
              return form
      
      admin.site.register(Page, PageAdmin)
      

      【讨论】:

        【解决方案4】:

        我知道我发布这个解决方案有点晚了,但如果有其他人遇到你,可以像我一样尝试:

        def save_model(self, request, obj, form, change):
            if getattr(obj, 'author', None) is None:
                obj.author = request.user
            obj.save()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-20
          • 2021-12-18
          • 1970-01-01
          • 1970-01-01
          • 2022-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多