有没有办法按参数预填充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',]
add
页面?add_book
页面上的发布商字段?我知道内联,但我不能在我的情况下使用它们。我还查看了prepopulated_fields
但这些只能从现有字段中读取。
答案 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
来管理字段。