Django 1.9:添加自定义按钮以在单击应用程序/模型的管理站点时运行 python 脚本

问题描述 投票:0回答:2

我在 django 项目中创建了一个应用程序。这个应用程序有四种型号。我可以从管理站点添加/修改/删除所有四个模型。但对于四个模型之一(例如 ModelXYZ),我需要为此表中的每个条目添加一个自定义按钮。目前,我可以看到 ModelXYZ 表中每个条目的“保存”、“删除”等按钮。 我需要添加另一个按钮“运行”,单击它将执行仅在该应用程序中编写的 python 脚本。目前,我正在像这样运行该脚本 -

python manage.py shell
>>> execfile("my_app/my_script_1.py")
>>> execfile("my_app/my_script_2.py")

每个条目的脚本名称也存储在 ModelXYZ 表中。

Django 文档说管理站点是可定制的,但我不太确定如何通过单击按钮来运行 python 脚本。

python django django-models django-templates django-admin
2个回答
0
投票

我这样解决了它,它解决了我的目的:-

class Site(models.Model):
    name = models.CharField(null=False, blank=False, max_length=256, unique=True)
    script = models.CharField(null=False, blank=False, max_length=256)
    def __unicode__(self):
       return u"{0}".format(self.name)

然后在 my_app/admin.py 中,我写道:-

from django.contrib import admin

from .models import *

def run(self, request, queryset):
    id=request.POST.get('_selected_action')
    siteObj=self.model.objects.get(pk=id)
    self.message_user(request, "Running: " + siteObj.script)
    execfile(siteObj.script)
run.short_description = "Run the script"

class SiteAdmin(admin.ModelAdmin):
    actions = [run]
    model = Site

# Register your models here.
admin.site.register(Site, SiteAdmin)

0
投票

您可以编写自定义命令:
https://docs.djangoproject.com/en/5.0/howto/custom-management-commands/

然后从您的代码中使用 call_command 调用命令:
https://docs.djangoproject.com/en/5.0/ref/django-admin/#django.core.management.call_command

要从管理员调用,您可以创建自定义操作:https://docs.djangoproject.com/en/5.0/ref/contrib/admin/actions/

© www.soinside.com 2019 - 2024. All rights reserved.