2013-11-02 10 views
2

У меня есть объект публикации, доступ к которому можно получить на веб-сайте или в панели администратора. В обоих случаях пользователю автоматически присваивается сообщение, когда пользователь отправляет его. В области веб-сайта он отлично работает. Однако он не работает в области администрирования. Во-первых, я попробовал просто ввести форму. Когда я пытаюсь сохранить объект и оставить его пустым, он сообщает мне, что форма не имеет значения. Затем, пытаясь увидеть, если я просто помещаю случайное значение и вижу, что он был перезаписан, я сделал это. Однако это случайное значение не было перезаписано текущим пользователем. Если я исключил поле, когда я попытаюсь сохранить модель, я получаю ошибку Integrity, говоря, что автор поля «не может быть 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

Я добавил это только для информации, поскольку я столкнулся с этим сообщением, которое заставило меня заглянуть глубже в проблему, с которой у меня было подобное ...
Чтобы предварительно заполнить поле admin в Django 1.11 из «Запрос» данные, смотрите ниже примере модели «пользователь» поле будучи предварительно укомплектованных вошедшего пользователя:

admin.py

class PostingAdmin(admin.ModelAdmin): 

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

Это заполнит поле при первоначальном добавлении нового «Администратор проводки» (экземпляр модели), прежде чем он будет сохранен в первый раз.

Смежные вопросы