gpt4 book ai didi

Django 管理列表显示 : Link to filtered model

转载 作者:行者123 更新时间:2023-12-02 20:07:42 25 4
gpt4 key购买 nike

我想制作一个音乐库应用程序,在管理/艺术家页面中我想链接到包含该艺术家的所有专辑的列表。

模型看起来像这样:

class Artist(models.Model):
artistName = models.CharField(max_length=100, blank = False)
genre = models.CharField(max_length=100, blank = False)

def __str__(self):
return self.artistName

class Album(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
albumName = models.CharField(max_length=500, blank = False)
year = models.IntegerField(blank = False)

def __str__(self):
return self.albumName

现在对于管理部分,我想象我制作了一个 ArtistAdmin 模型,然后以某种方式使用 list_display 链接到专辑模型的过滤版本。谁能告诉我如何做到这一点或提出更好的方法?

最佳答案

我有完全相同的需求;这是迄今为止我想到的最简单的方法。

管理员列表有 list_filter ,例如,您可以使用它来执行此操作(假设您注册了管理类等):

class AlbumAdmin(admin.ModelAdmin):
list_display = ('artist', 'albumName', 'year',)
list_filter = ('artist',)

这将在您的管理网站中添加一个包含艺术家列表的右侧列,如果您单击其中一个,专辑列表将被过滤以仅显示该艺术家制作的专辑。

有了这个,这就是技巧,即使你没有声明“list_filter”,Django 仍然会根据 URL 参数过滤内容。因此,我激活了过滤器,单击了我的一位“艺术家”,因此列表被过滤,我可以看到它如何格式化 URL,类似于[…]/admin/app_name/model_name/?foreignKeyName__id__exact=XX

就你的情况而言,我想它看起来类似于:[…]/admin/music_library/album/?artist__id__exact=XX

尝试按照以下步骤操作,然后删除“list_filter”行,您将看到该网址仍然有效。

现在我们知道我们唯一需要的就是传递参数artist__id__exact=XX,所以我们必须为此添加一个带有按钮的列。

class ArtistAdmin(admin.ModelAdmin):
list_display = ('artistName', 'genre', 'artists_list_field')

def artists_list_field(self, obj):
base_url = reverse('admin:music_library_album_changelist')
return mark_safe(u'<a href="%s?artist_id__exact=%d">Albums</a>' % (
base_url, obj.id))

有了这个你就可以工作了。我希望它有用!

关于Django 管理列表显示 : Link to filtered model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com