Skip to main content
 首页 » 编程设计

python之在 Django Admin 中添加指向 Actions 的链接

2025年02月15日37over140

在 Django admin 中,我有一个打印按钮,可以将信息发送到模板。我想添加到 Action 下 zipper 接中,我在其中复选框选择所需的条目并在 Action 下拉列表中选择 打印。 但是,当我向 Aсtion 下拉列表添加链接时,我收到有关获取第三个参数的错误。我无法理解这是第三个参数。

admin.py

@admin.register(Salary) 
class SalaryAdmin (admin.ModelAdmin): 
    list_display = ('worker', 'salary_uah', 'dates', 'button') 
    search_fields = ('worker', 'salary_uah', 'dates') 
    list_filter = ('worker', 'date') 
    actions = ['button'] 
 
    def button(self, obj): 
        return '<a class="button" href="{}">Print</a>'.format(reverse('act', args=[obj.pk])) 
 
    button.short_description = 'Actions' 
    button.allow_tags = True 

urls.py

urlpatterns = [ 
    url(r'^$',home, name='home'), 
    url(r'^add/$',add_worker, name='add'), 
    url(r'^act/(?P<obj>[\w-]+)$',acts, name='act') 
] 

模型.py

class Salary (models.Model): 
    worker = models.ForeignKey(Worker) 
    salary_uah = models.IntegerField ('Salary') 
    date = models.DateTimeField('Date', default=datetime.datetime.utcnow()) 

views.py

def acts (request, obj): 
    if not request.user.is_authenticated(): 
        return redirect('admin:login') 
    salary = Salary.objects.get(id=obj) 
    workers = Worker.objects.filter(id=salary.worker.pk).values() 
    salary = Salary.objects.filter(id=obj).values() 
    return render(request, 'zpapp/act.html', {'workers':workers, 'salary':salary }) 

错误信息:

TypeError at /admin/zpapp/salary/ 
button() takes 2 positional arguments but 3 were given 

你能帮我在 Action 中添加一个链接吗?

请您参考如下方法:

我认为你走错了路。操作应该只是将由 django 自动添加到下拉列表中的文本。此处不支持 HTML 链接 AFAIK。进一步:

First, we’ll need to write a function that gets called when the action is triggered from the admin. Action functions are just regular functions that take three arguments:

The current ModelAdmin An HttpRequest representing the current request, A QuerySet containing the set of objects selected by the user. Our publish-these-articles function won’t need the ModelAdmin or the request object, but we will use the queryset:

来源:

如果要让你的 action 可用,就必须是

def button(self, request, queryset): 

另一方面,如果您想要将 HTML 按钮添加到 ListView 或编辑 View ,则需要修改管理模板。