2013-11-02 64 views
2

我有一個可以在網站或管理面板訪問的發佈對象。在這兩種情況下,當用戶發佈帖子時,用戶都會自動分配到帖子。在網站區域,它工作正常。但是,它在管理區域中不起作用。首先,我嘗試在那裏輸入表單。當我嘗試保存對象並將輸入留空時,它告訴我表單沒有任何價值。然後,試圖看看我是否隨機添加了一個值,然後看看它是否被覆蓋,我這樣做了。但是,該隨機值不會被當前用戶覆蓋。如果我排除了字段,當我嘗試保存模型時,我得到一個完整性錯誤,表示字段作者'可能不是NULL',所以我假設我的save_model()函數根本沒有正確觸發。現在我使用的代碼已經遍佈互聯網,人們聲稱它可以工作,但我不知道它現在是否已經崩潰或者是什麼。這裏是我的代碼:獲取當前用戶在Django admin

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

您可以通過添加請求作爲新創建的表單類的屬性來覆蓋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 
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) 
0

我知道我是一個有點晚張貼此解決方案,但像我這樣的,如果別人碰到,你可以嘗試:

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

我只是添加了這個信息,因爲我遇到這個帖子,這讓我看起來更深,因爲我遇到了類似的問題...
要預先填充Django 1.11中的管理字段「請求」的數據,參見實施例一模型「用戶」字段被預填充與登錄的用戶的下面:

admin.py

class PostingAdmin(admin.ModelAdmin): 

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

此填充當最初添加新的字段「發佈管理員」(模型實例)在第一次保存之前。