管理编辑视图 - 按参数填充字段

时间:2013-11-27 18:57:39

标签: python django django-admin

有没有办法按参数预填充admin add form? 使用通常的图书发布商示例,我正在尝试在发布商编辑页面上建立一个链接,以直接添加图书:

来自django.db导入模型

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

class Book(models.Model):
    title = models.CharField(max_length=100)

    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

我想通过链接调整我的发布商模型,直接添加以下链接到我的发布商模型:

class PublisherAdmin(admin.ModelAdmin):

    def add_book_link(self, instance):
        url = reverse('admin:myapp_book_add')
        return mark_safe(u'<a href="{u}">Add</a>'.format(u=url))

    add_book_link.short_description = _("New Book")

    readonly_fields = ['add_book_link',]
  1. 如何将参数(发布商ID)传递给add页面?
  2. 如何更改add_book页面上的发布商字段?
  3. 我知道内联,但我不能在我的情况下使用它们。我还查看了prepopulated_fields但这些只能从现有字段中读取。

1 个答案:

答案 0 :(得分:1)

这实际上并不难。使用request.GET实例化添加表单以设置初始值,因此您需要做的就是将适当的值放入您的URL:

def add_book_link(self, instance):
    if instance.id:
        url = '%s?publisher=%d' % (reverse('admin:myapp_book_add'), instance.id)
    else:
        url = reverse('admin:myapp_book_add')
    return mark_safe(u'<a href="{u}">Add</a>'.format(u=url))

我一般习惯于设置allow_tags而不是使用mark_safe来管理字段。