1

我正在尝试通过操作将多个项目添加到 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 admin ManyToManyField 选择器的模板的页面。如何/add_authors使用查询集上下文重定向到?

我怎样才能让它工作?

谢谢。

4

1 回答 1

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

于 2015-10-10T01:06:00.613 回答