是否有方法通过参数预填充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',]
- 如何将参数(发布者id)传递到
add
页面 - 如何更改
add_book
页面上的"发布者"字段
我知道内联,但在我的情况下我不能使用它们。我还查看了prepopulated_fields
,但它们只能从现有字段中读取。
这其实并不难。添加表单是使用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
。