当前位置: 首页 > 面试题库 >

如何在Django管理面板中列出所有与外键相关的对象?

缪英锐
2023-03-14
问题内容

我想用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)

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

  • JK罗琳(书籍)
  • JRR托尔金(书籍)

书籍是指向显示所有作者书籍的网站的超链接。


问题答案:

您正在寻找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]

免责声明:未经测试,但是如果您解决了错字问题,它将起作用!:)

请注意,这些链接也可以在管理员的其他位置插入。将其添加到窗口小部件时,可以从更改视图转到更改视图。



 类似资料:
  • 问题内容: 我知道你会说这个问题被问过很多次了,但是我还没有解决呢… models.py views.py 模板: 我已经尝试过上面的模板,但没有得到任何结果。所以我想在DocImage类中获取imageurl地址… 所有帮助 问题答案: 如果您查看外键文档,如果您有类似的关系 您需要像这样在DocImages类上定义外键: 如果您未设置相关名称,则可以像下面这样从Doc访问DocImage: 有

  • 问题内容: 我有一种类似于以下的双向外交关系 我如何将Parent.favoritechild的选择限制为仅其父母为自己的孩子?我试过了 但这会导致管理界面未列出任何子项。 问题答案: 我刚刚在Django文档中碰到。尚不确定这是如何工作的,但在这里可能是正确的事情。 允许指定常量,可调用对象或Q对象以限制键的允许选择。常量在这里显然没有用,因为它对所涉及的对象一无所知。 使用可调用(函数或类方法

  • 问题内容: 我一直在努力开发可在Django和Flash应用程序中使用的RESTful服务。 开发服务接口非常简单,但是我遇到了序列化具有外键和多对多关系的对象的问题。 我有一个像这样的模型: 然后,我将使用对此模型进行查询,以确保遵循外键关系: 获得对象后,我将其序列化,并将其传递回我的视图: 这就是我得到的,请注意,外键(object_type和个人)只是其相关对象的ID。 很好,但是我希望使

  • 对编码来说是新的,如果已经涵盖了,请道歉。花了几个晚上在Django的文档、YouTube、谷歌和这里尝试各种方法来解决这个问题。 我有一个与驾驶员相关的模型路线,我试图在我的模板上显示所有与该路线相关的驾驶员的路线。然而,目前我所能得到的只是来自路线模型的数据,而不是相关驾驶员的数据。 会感谢任何帮助,因为我正在努力让我的头! Models.py Views.py 样板 我尝试过.prefetc

  • 问题内容: 如何获得所有具有ForeignKey指向对象的模型对象的列表?(类似于DELETE CASCADE之前Django管理员中的删除确认页面)。 我试图提出一种合并数据库中重复对象的通用方法。基本上,我希望所有具有ForeignKeys指向对象“ B”的对象都被更新为指向对象“ A”,这样我就可以删除“ B”而不会丢失任何重要内容。 谢谢你的帮助! 问题答案: Django <= 1.7

  • 我创建了一个出价模型,以便类型2用户可以在类型1用户创建的一些“帖子”上出价。为了实现这一点,我在模型“出价”中为帖子字段做了一个外键。 实际上,我想把出价与一个特定的帖子联系起来,在“帖子”模型中自动生成“id”。因此,我将get_absolute_url放在我的模板中的Post'id'旁边。我是django的新手,我不确定它是否能满足我的需求。 我如何将带有post_id的出价与模板中的某个特