我想用django管理面板实现一个非常简单的功能,但是到目前为止,我找不到正确的方法来实现这一目标:
模型
class Author(models.Model):
name = models.CharField()
class Books(models.Model):
title = models.CharField()
author = models.ForeignKey(Author)
管理员
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
如何在作者列表概述中的每个项目(作者)上添加超链接,该超链接链接到显示特定作者的所有书籍的视图?例如:
书籍是指向显示所有作者书籍的网站的超链接。
您正在寻找ModelAdmin.list_filter。
设置list_filter以激活管理员更改列表页面右侧栏中的过滤器。listfilter可以是字段名称,其中指定的字段应该是BooleanField,CharField,DateField,DateTimeField,IntegerField,ForeignKey或ManyToManyField,例如:
# Add a list filter author to BookAdmin.
# Now you can filter books by author.
class BookAdmin(ModelAdmin):
list_filter = ('author', )
现在,您可以使用@Wolph建议在作者list_display中添加链接。该链接指向按作者过滤的图书清单:
# Add hyperlinks to AuthorAdmin.
# Now you can jump to the book list filtered by autor.
class AuthorAdmin(admin.ModelAdmin):
def authors(self):
return '<a href="/admin/appname/book/?author__id__exact=%d">%s</a>' % (self.author_id, self.author)
authors.allow_tags = True
替代。要保存点击,您还可以直接指向书籍的更改视图:
class Books(models.Model):
title = models.CharField()
author = models.ForeignKey(Author)
def get_admin_url(self):
return "/admin/appname/books/%d/" %self.id
class BookAdmin(admin.ModelAdmin):
def authors(self):
html = ""
for obj in Books.objects.filter(author__id_exact=self.id):
html += '<p><a href="%s">%s</a></p>' %(obj.get_admin_url(), obj.title)
return html
authors.allow_tags = True
list_display = ['title', authors]
免责声明:未经测试,但是如果您解决了错字问题,它将起作用!:)
请注意,这些链接也可以在管理员的其他位置插入。将其添加到窗口小部件时,可以从更改视图转到更改视图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句