Python Django管理定制

Python Django管理定制,python,django,django-admin,django-templates,customization,Python,Django,Django Admin,Django Templates,Customization,我正在设计一个管理界面,邀请邮件将发送给用户。我的邀请模型已经准备好&在我的邀请管理界面中,我可以看到我添加的用户,管理员可以为这些用户发送电子邮件邀请 现在我想定制一下。我想为每一行添加一个SEND按钮,该按钮将实际向该用户发送电子邮件。发送电子邮件功能等都准备好了。我不知道如何自定义此管理模板以添加send按钮。有人能帮忙吗??或者至少给我指出正确的方向 p.S:它不需要是一个发送按钮,它可以是“操作”下拉列表的一部分,对于所选用户,我可以在其中共同发送电子邮件。我下面的解决方案是在管理界面

我正在设计一个管理界面,邀请邮件将发送给用户。我的邀请模型已经准备好&在我的邀请管理界面中,我可以看到我添加的用户,管理员可以为这些用户发送电子邮件邀请

现在我想定制一下。我想为每一行添加一个
SEND
按钮,该按钮将实际向该用户发送电子邮件。发送电子邮件功能等都准备好了。我不知道如何自定义此管理模板以添加
send
按钮。有人能帮忙吗??或者至少给我指出正确的方向


p.S:它不需要是一个发送按钮,它可以是“操作”下拉列表的一部分,对于所选用户,我可以在其中共同发送电子邮件。

我下面的解决方案是在管理界面中添加“发送邀请”操作

“发送邀请”操作

您可以参考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)

我还没有测试过这段代码,但它正是您所需要的。希望这有帮助。

我下面的解决方案是在管理界面中添加“发送邀请”操作

“发送邀请”操作

您可以参考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)

我还没有测试过这段代码,但它正是您所需要的。希望这有帮助。

关于每行的发送按钮,您可以为您的模型(或ModelAdmin)提供一个新函数,该函数返回指向视图的相应HTML(或调用相应的AJAX函数)。只需将您的函数添加到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

关于每行的send按钮,您可以为您的模型(或ModelAdmin)提供一个新函数,该函数返回指向视图的相应HTML(或调用相应的AJAX函数)。只需将您的函数添加到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

凉的这很好。当管理员单击“发送”时,我将如何向其添加功能?基本上,单击“发送”后,整行必须发送到发送电子邮件的我的
send\u email\u view
。抱歉,请重新阅读您的答案。因此,您建议使用ajax路由,从javascript将整行发送到我的
send\u email\u视图
。还有其他方法吗?对不起,有一段时间没有检查。。。六羟甲基三聚氰胺六甲醚。。。您可以向每一行添加一个submit按钮,将对应行的对象id放入其名称中,然后检查单击了哪个按钮,而不是查看勾选了哪些复选框。所以基本上喜欢这个动作,但是从按钮名而不是复选框中读取单个对象。酷!这很好。当管理员单击“发送”时,我将如何向其添加功能?基本上,单击“发送”后,整行必须发送到发送电子邮件的我的
send\u email\u view
。抱歉,请重新阅读您的答案。因此,您建议使用ajax路由,从javascript将整行发送到我的
send\u email\u视图
。还有其他方法吗?对不起,有一段时间没有检查。。。六羟甲基三聚氰胺六甲醚。。。您可以向每一行添加一个submit按钮,将对应行的对象id放入其名称中,然后检查单击了哪个按钮,而不是查看勾选了哪些复选框。所以基本上就像这个动作,但是从按钮名而不是复选框中读取单个对象。