Django: настройка сообщения после успешного сохранения формы - PullRequest
5 голосов
/ 28 декабря 2010

всякий раз, когда я сохраняю модель в своем интерфейсе администратора, она отображает обычное «успешно сохраненное сообщение». Однако я хочу знать, возможно ли настроить это сообщение, потому что у меня есть ситуация, когда я хочу предупредить пользователя о том, что он только что сохранил, и последствиях этих действий.

class PlanInlineFormset(forms.models.BaseInlineFormset):
    def clean(self):
        ### How can I detect the changes?  
        ### (self.changed_data doesn't work because it's an inline)
        ### and display what he/she just changed at the top AFTER the successful save?

class PlanInline(admin.TabularInline):
    model = Plan
    formset = PlanInlineFormset

Ответы [ 2 ]

8 голосов
/ 29 декабря 2010

Django (> версия 1.2) использует структуру сообщений для сообщений администратора. Вы можете добавить дополнительные сообщения, используя этот интерфейс. Вот пример:

from django.contrib import messages

class SomeModelAdmin(admin.ModelAdmin):
    # your normal ModelAdmin stuff goes here

    def save_model(self, request, obj, form, change):
        # add an additional message
        messages.info(request, "Extra message here.")
        super(SomeModelAdmin, self).save_model(request, obj, form, change)

Чтобы обнаружить изменения в сохраняемом объекте, необходимо переопределить метод save_model *1005* объекта ModelAdmin и сравнить объект, метод передается в текущую версию базы данных. Для этого в случае встроенных функций вы можете переопределить метод save_formset . Возможный подход может выглядеть так (непроверенный код):

class SomeModelAdmin(admin.ModelAdmin):
    # your normal ModelAdmin stuff goes here

    def save_formset(self, request, form, formset, change):
        if not change:
            formset.save()
        else:
            instances = formset.save(commit=False)

            for instance in instances:
                try:
                    # if you've got multiple types of inlines
                    # make sure your fetching from the 
                    # appropriate model type here
                    old_object = SomeOtherModel.get(id=instance.id)
                except SomeOtherModel.DoesNotExist:
                    continue

                if instance.field_x != old_object.field_x:
                    messages.info(request, "Something Changed")

            instance.save()

        formset.save_m2m()
1 голос
/ 29 декабря 2010

Если вы используете Django 1.2 или новее, платформа сообщений может содержать ответ.

http://docs.djangoproject.com/en/dev/ref/contrib/messages/

...