2

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

4 回答 4

2

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

管理员.py

class PostingAdmin(admin.ModelAdmin):

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

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

于 2017-08-30T01:46:48.007 回答
1

您可以通过将请求添加为新创建的表单类的属性来覆盖 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
于 2014-01-06T16:46:02.093 回答
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)
于 2014-06-22T11:46:05.883 回答
0

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

def save_model(self, request, obj, form, change):
    if getattr(obj, 'author', None) is None:
        obj.author = request.user
    obj.save()
于 2017-07-05T17:32:07.017 回答