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