Django:如何从管理接口调用管理自定义命令执行?

2024-06-11 01:44:47 发布

您现在位置:Python中文网/ 问答频道 /正文

指,executing management commands from code

它们是从django管理接口调用这个命令执行代码的方法吗?在

我有一个自定义命令来定期更新scheduled as cron的数据库。老太婆工作得很好。我需要从管理界面手动更新数据库。在


Tags: django方法代码from命令数据库界面as
1条回答
网友
1楼 · 发布于 2024-06-11 01:44:47

更新:只需从python代码中的任何位置调用函数call_command('compilemessages'),就可以运行任何管理命令。在

示例:

from django.core.management import call_command
call_command('compilemessages')

如果任务绑定到当前在管理中查看的对象,一个不错的方法是在单击按钮时实现一个由ajax脚本调用的额外视图。额外的视图可以选择包装成芹菜任务,例如

模型.py

^{pr2}$

管理员py

class FooAdmin(admin.ModelAdmin):
    list_display = ['other_field', 'my_task_init']

    class Media:
        js = (
            'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js',
            '/static/js/admin_tasks.js',
        )

    def get_urls(self):
        urls = super(FooAdmin, self).get_urls()
        extra_urls = patterns('',
            (r'^my-task/$', self.admin_site.admin_view(self.parse_view))
        )
        return extra_urls + urls

    # optionally decorated by celery
    def task_view(self, request):
        if not request.is_ajax():
            raise Http404
        task_id = request.GET.get('task_id')
        # your logic
        return HttpResponse('Success')

管理员_任务.js

$(document).ready(function (){
   $('.task').click(function(){
       var image = $(this).find('img'),
           loading = $(this).parent().find('.loading'),
           task_id = $(this).data('identifier').replace('task_', '');
       $.ajax({
           type: "GET",
           data: ({'task_id': task_id}),
           url: "/admin/app/model/my-task/",
           beforeSend: function() {
               image.hide();
               loading.show();
           },
           statusCode: {
               200: function() {
                   loading.hide();
                   image.attr('src', '/static/img/success.png');
                   image.show();
               },
               404: function() {
                   loading.hide();
                   image.attr('src', '/static/img/error.png');
                   image.show();
               },
               500: function() {
                   loading.hide();
                   image.attr('src', '/static/img/error.png');
                   image.show();
               }
           }
       });
   });
});

如果您试图启动一个未绑定的任务,您可以覆盖一个模板元素或添加一些html。在

相关问题 更多 >