如何在Django管理面板中列出所有与外键相关的对象? [英] How can I list all foreign key related objects in Django admin panel?

查看:150
本文介绍了如何在Django管理面板中列出所有与外键相关的对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用django管理面板实现一个非常简单的功能,但是到目前为止我找不到正确的方法来实现这一点:

I would like to implement a very simple feature with the django admin panel but I couldn't find the right way to achieve this so far:

model.py

class Author(models.Model):
    name = models.CharField()

class Books(models.Model):
    title = models.CharField()
    author = models.ForeignKey(Author)

admin.py

class AuthorAdmin(admin.ModelAdmin):
    pass
admin.site.register(Author, AuthorAdmin)

如何添加超链接到作者列表概述中的每个项目(作者)链接到显示特定作者的所有书籍的视图?例如:

How can I add a hyperlink to every item (Author) in the authors' list overview that links to a view showing all books of the specific author? For Example:


  • J.K。罗琳(书)

  • J.R.R。托尔金(书)

其中书籍是显示作者所有图书的网站的超链接。

where books is a hyperlink to a site showing all books of the author.

推荐答案

您正在寻找 ModelAdmin.list_filter

设置list_filter以激活更改列表右侧栏中的过滤器管理员页面。 listfilter可以是字段名称,其中指定的字段应为BooleanField,CharField,DateField,DateTimeField,IntegerField,ForeignKey或ManyToManyField,例如:

Set list_filter to activate filters in the right sidebar of the change list page of the admin. A listfilter can be a field name, where the specified field should be either a BooleanField, CharField, DateField, DateTimeField, IntegerField, ForeignKey or ManyToManyField, for example:

 # Add a list filter author to BookAdmin.
 # Now you can filter books by author.
 class BookAdmin(ModelAdmin):
    list_filter = ('author', )

现在您可以使用@Wolph建议在作者list_display中添加链接。此链接指向作者过滤的图书列表:

Now you can use @Wolph suggestion to add a link in the Author list_display. This link points to the book list filtered by author:

# 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



替换。要保存点击,您还可以直接指向一本书的更改视图:

ALTERNATIVE. To save a click you can also point to the change view of a book directly:

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]

免责声明:未经测试,但如果您修正打字错误,它会工作! :)

Disclaimer: Not tested, but if you fix the typo's it'll work! :)

请注意,这些链接也可以注入管理员的其他点。当您将其添加到窗口小部件时,您可以从更改视图切换到更改视图。

Note that these links can also be injected at other points in the admin. When you add it to a widget, you can go from change view to change view.

这篇关于如何在Django管理面板中列出所有与外键相关的对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆