Django Admin Customizing - PullRequest
       1

Django Admin Customizing

1 голос
/ 27 апреля 2011

Я разрабатываю интерфейс администратора, где пользователям будут отправляться приглашения. Моя модель приглашений готова, и в моем интерфейсе администратора приглашений я вижу своих добавленных пользователей, для которых администратор может отправлять приглашения по электронной почте. admin interface so far

Теперь я хочу немного настроить это. Я хочу добавить для каждой строки кнопку SEND, которая фактически отправит электронное письмо этому пользователю. Функция отправки электронной почты и т. Д. Все готово. Я не понимаю, как я могу настроить этот шаблон администратора, чтобы добавить кнопку send. Может кто-нибудь помочь ?? или, по крайней мере, покажи мне правильное направление ...

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

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

Что касается кнопки отправки для каждой строки, вы можете дать своей модели (или ModelAdmin) новую функцию, которая возвращает соответствующий HTML-код, указывающий на ваши представления (или вызывая соответствующие функции AJAX). Просто добавьте свою функцию в list_display ModelAdmin и убедитесь, что HTML-теги не экранированы:

class MyModelAdmin(admin.ModelAdmin):
    ...
    list_display = ('name', 'email', 'sender', 'send_email_html')

    def send_email_html(self, obj):
        # example using a javascript function send_email()
        return '<a href="send_email(%s)">Send Now</a>' % obj.id
    send_email_html.short_description = 'Send Email'
    send_email_html.allow_tags = True

Что касается использования действия, определите «действия» в ModelAdmin как список, содержащий вашу функцию, которая принимает modeladmin, request, queryset в качестве параметров:

def send_email_action(modeladmin, request, queryset):
    whatever_you_want_to_do_with_request_and_queryset
send_email.short_description = 'Send email'

class MyModelAdmin(admin.ModelAdmin):
    ...
    actions = [
        send_email_action
    ]
4 голосов
/ 27 апреля 2011

Мое решение ниже для добавления действия "отправить приглашение" в интерфейсе администратора

Действие "Отправить приглашение"

Вы можете обратиться к документации по админ-действиям django здесь . Вот как должен выглядеть ваш admin.py:

from django.contrib import admin
from myapp.models import MyModel
from django.core.mail import send_mail

class MyModelAdmin(admin.ModelAdmin):
    actions = ['send_invite']

    def send_invite(self, request, queryset):
        # the below can be modified according to your application.
        # queryset will hold the instances of your model
        for profile in queryset:
            send_email(subject="Invite", message="Hello", from_eamil='myemail@mydomain.com', recipient_list=[profile.email]) # use your email function here
   send_invite.short_description = "Send invitation"

admin.site.register(MyModel, MyModelAdmin)

Я не тестировал этот код, но он в значительной степени вам нужен. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...