获取Django admin的当前用户

时间:2013-11-02 18:04:23

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

我有一个发布对象,可以在网站或管理面板中访问。在两者中,当用户发布帖子时,用户被自动分配到帖子。在网站区域,它工作正常。但是,它在管理区域中不起作用。首先,我尝试在那里输入表单。当我尝试保存对象并将输入留空时,它告诉我表单没有任何价值。然后,试着看看我是否只是放入一个随机值并查看它是否被覆盖,我就这样做了。但是,该随机值未被当前用户覆盖。如果我排除了该字段,当我尝试保存模型时,我得到一个完整性错误,说字段作者'可能不是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)

4 个答案:

答案 0 :(得分:0)

您可以通过将请求添加为新创建的表单类的属性来覆盖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

答案 1 :(得分:0)

这对我有用:

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)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我添加此内容仅供参考,因为我发现这篇帖子让我更深入地了解了我遇到的类似问题...... 要从"请求"预先填充Django 1.11中的管理字段。数据,见下面的模型示例" user"字段正在使用登录用户预先填充:

<强> admin.py

class PostingAdmin(admin.ModelAdmin):

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

这会在最初添加新的&#34;发布管理员&#34;时填充该字段。 (模型实例)在第一次保存之前。

相关问题