Django管理员动作添加批量多个字段?

时间:2015-10-09 21:18:51

标签: python django django-admin django-admin-actions

我正在尝试通过操作向Django上的ManyToManyField添加多个项目。 模特:

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    website = models.URLField()


class Author(models.Model):
    name = models.CharField(max_length=30)
    twitter = models.CharField(max_length=20)


class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

管理员面板

def add_authors(modeladmin, request, queryset):
    return HttpResponseRedirect('/add_authors')

@admin.register(Book)
class BookRegister(admin.ModelAdmin):
    actions = [add_authors]

我想将所选项目重定向到/add_authors页面,我想要一个具有Djagno管理员ManyToManyField选择器的模板。如何使用queryset上下文重定向到/add_authors

我怎样才能让它发挥作用?

感谢。

1 个答案:

答案 0 :(得分:1)

这样的内容会让您pk所有选定的Books

import urllib

def add_authors(modeladmin, request, queryset):
    params = {
        'books': queryset.values_list('id', flat=True)
    }
    redirect_url = '/add_authors/?%s' % urllib.urlencode(params, doseq=True)
    return HttpResponseRedirect(redirect_url)

您可以在pk视图中检索图书add_authors列表:

# http://.../?books=1&books=2&...
books = request.GET.getlist('books')

查看formfield_for_manytomany如何在modeladmin中自动填充M2M字段:

文档:https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_manytomany