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

时间:2017-01-11 07:31:21

标签: python django python-3.x django-admin

在Django admin中,我有一个打印按钮,可以向模板发送信息。我想添加到Action下拉链接,我在其中选中所需的条目并在Action下拉列表中选择 Print。 但是当我添加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')
]

models.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

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

1 个答案:

答案 0 :(得分:1)

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

  

首先,我们需要编写一个在动作时调用的函数   由管理员触发。动作功能只是常规的   带有三个参数的函数:

     

当前的ModelAdmin表示当前的HttpRequest   request,一个QuerySet,包含由中选择的一组对象   用户。我们的publish-these-articles函数不需要ModelAdmin或   请求对象,但我们将使用queryset:

来源:

如果您的行动完全可用,则需要

def button(self, request, queryset):

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