我在django项目中创建了一个应用程序。这个程序有四个型号。我可以从管理站点添加/修改/删除所有四个模型。但对于四个模型中的一个(比如ModelXYZ),我需要为此表中的每个条目添加一个自定义按钮。目前,我可以看到ModelXYZ表中每个条目的“保存”,“删除”等按钮。 我需要添加另一个按钮“Run”,单击它将执行仅在该应用程序中编写的python脚本。目前,我正在运行这样的脚本 -
python manage.py shell
>>> execfile("my_app/my_script_1.py")
>>> execfile("my_app/my_script_2.py")
脚本名称也存储在每个条目的ModelXYZ表中。
Django文档说管理站点是可自定义的,但我不太确定如何通过单击按钮来运行python脚本。
答案 0 :(得分:0)
您可以编写自定义命令: https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/
然后从您的代码调用call_command命令: https://docs.djangoproject.com/en/1.9/ref/django-admin/#django.core.management.call_command
要从管理员拨打电话,您可以创建自定义操作:https://docs.djangoproject.com/en/1.9/ref/contrib/admin/actions/
答案 1 :(得分:-1)
我这样解决了它,它解决了我的目的: -
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)