Django пользовательские действия администратора автообновление / обновление страницы администратора - PullRequest
2 голосов
/ 18 августа 2011

У меня есть действие администратора, которое открывает объект pdf из моей базы данных и обновляет определенные поля, связанные с этой строкой.Как получить на странице администратора автоматическое отображение изменений в этих полях, как это происходит с предварительно установленным действием удаления администратора после его выполнения?Я экспериментировал с использованием HttpResponseRedirect в качестве обходного пути, но не смог заставить его работать в сочетании с моим объектом ответа - только одна или другая работа.Есть ли простой способ заставить страницу автоматически обновляться?Заранее спасибо за любые рекомендации!

from django.contrib import admin
from django.contrib.auth.models import User
from djangostuff.pdf.models import ABC
from django.http import HttpResponse, HttpResponseRedirect
import datetime, time

class ABCAdmin(admin.ModelAdmin):

    actions = ['print_selected_pdf']

    def get_user(self):
        return '%s'%(self.user.username)

    def create_pdf(self, request, queryset):
        response = HttpResponse(mimetype="application/pdf")
        response['Content-Disposition'] = 'attachment; filename=form.pdf'
        for obj in queryset:
            response.write(obj.form)
            rows_updated = ABC.objects.filter(pk=obj.pk).update(user=request.user,pdf_printed="1",request_time=time.strftime("%H:%M:%S"),request_date=datetime.datetime.today())
            if rows_updated == 1:
                message_bit = "1 form was"
            else:
                message_bit = "%s forms were" % rows_updated
            self.message_user(request, "%s successfully printed." % message_bit)
            return response
            #HttpResponseRedirect("/admin/pdf/abc")


    def print_selected_pdf(self, request, queryset):
        # prints the pdfs for those that are selected,
        # regardless if the pdf_printed field is true or false
        qs = queryset.filter(pdf_printed__exact=0)
        return self.create_pdf(request, qs)

    print_selected_pdf.short_description = "Print Selected PDF"
    get_user.short_description='Printed By'
    list_display=('form_no',get_user,'request_date','request_time','pdf_printed')


admin.site.register(ABC, ABCAdmin)

1 Ответ

1 голос
/ 12 августа 2013

Чтобы решить эту проблему, вы можете создать промежуточную страницу для перенаправления для подтверждения, а затем перенаправить пользователя обратно на исходную страницу списка изменений, и ваше сообщение будет отображаться.Встроенное действие администратора для удаления объекта уже выполняет это.

Подробнее об этом можно прочитать здесь:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#actions-that-provide-intermediate-pages

...