Django管理列表\显示:链接到筛选模型
我想制作一个音乐库应用程序,在管理员/艺术家页面,我想链接到艺术家所有专辑的列表 模型如下所示:Django管理列表\显示:链接到筛选模型,django,django-models,foreign-keys,django-admin,Django,Django Models,Foreign Keys,Django Admin,我想制作一个音乐库应用程序,在管理员/艺术家页面,我想链接到艺术家所有专辑的列表 模型如下所示: 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.ar
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
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name',)
list_filter = ('company__name', 'first_name',) # company is a model which has relation to the Person model
现在,对于管理部分,我设想我制作了一个ArtistAdmin模型,然后以某种方式使用list_display链接到一个经过过滤的专辑模型版本。有人能告诉我怎么做,或者提出更好的方法吗 您可以在admin.py中使用列表显示和列表过滤器,如下所示:
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
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name',)
list_filter = ('company__name', 'first_name',) # company is a model which has relation to the Person model
然后在admin.py中,您应该将PersonAdmin添加到模型中:
admin.site.register(Person, PersonAdmin)
您可以在admin.py中使用列表显示和列表过滤器,如下所示:
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
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name',)
list_filter = ('company__name', 'first_name',) # company is a model which has relation to the Person model
然后在admin.py中,您应该将PersonAdmin添加到模型中:
admin.site.register(Person, PersonAdmin)
我也有同样的需求;这是迄今为止我提出的最简单的方法 管理员列表有,例如,您可以使用它(假设您注册管理员类等等): 这将在您的管理站点中添加一列艺术家列表,如果您单击其中一列,则相册列表将被过滤,以仅显示由该艺术家制作的相册 这样做的诀窍是,即使您不声明“list_filter”,Django仍然会根据URL参数进行过滤。 所以,我激活了过滤器,我点击了我的一个“艺术家”,所以列表被过滤了,我可以看到它是如何格式化URL的,就像 […]/admin/app\u name/model\u name/?foreignKeyName\uuuuu id\uuuuu-exact=XX 在您的情况下,我想它将类似于: […]/admin/music\u library/album/?artist\uuuuuu id\uuuuuuu exact=XX 尝试按照这些步骤操作,然后删除“list_filter”行,您将看到URL仍然有效 现在我们知道我们唯一需要的是传递参数artist\uuuu id\uuuu 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))
class-ArtistAdmin(admin.ModelAdmin):
列表\显示=('artistName'、'流派'、'艺术家\列表\字段')
定义艺术家列表字段(自身、obj):
base\u url=reverse('admin:music\u library\u album\u changelist')
返回标记_安全(u''%(
基本(url,对象id))
有了这个你就可以工作了。
我希望它有用 我也有同样的需要;这是迄今为止我提出的最简单的方法 管理员列表有,例如,您可以使用它(假设您注册管理员类等等): 这将在您的管理站点中添加一列艺术家列表,如果您单击其中一列,则相册列表将被过滤,以仅显示由该艺术家制作的相册 这样做的诀窍是,即使您不声明“list_filter”,Django仍然会根据URL参数进行过滤。 所以,我激活了过滤器,我点击了我的一个“艺术家”,所以列表被过滤了,我可以看到它是如何格式化URL的,就像 […]/admin/app\u name/model\u name/?foreignKeyName\uuuuu id\uuuuu-exact=XX 在您的情况下,我想它将类似于: […]/admin/music\u library/album/?artist\uuuuuu id\uuuuuuu exact=XX 尝试按照这些步骤操作,然后删除“list_filter”行,您将看到URL仍然有效 现在我们知道我们唯一需要的是传递参数artist\uuuu id\uuuu 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))
class-ArtistAdmin(admin.ModelAdmin):
列表\显示=('artistName'、'流派'、'艺术家\列表\字段')
定义艺术家列表字段(自身、obj):
base\u url=reverse('admin:music\u library\u album\u changelist')
返回标记_安全(u''%(
基本(url,对象id))
有了这个你就可以工作了。
我希望它有用 非常感谢您的回复。你的建议解决不了我的问题。我想转到ArtistAdmin页面,然后可以单击一个链接,将我带到AlbumAdmin页面,该页面按艺术家名称过滤。你有什么建议吗?你的回答并没有回答这个问题。非常感谢你的回答。你的建议解决不了我的问题。我想转到ArtistAdmin页面,然后可以单击一个链接,将我带到AlbumAdmin页面,该页面按艺术家名称过滤。有什么建议吗?你的答案没有回答这个问题。太好了。非常感谢:-)太好了。非常感谢:-)