Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django管理列表\显示:链接到筛选模型_Django_Django Models_Foreign Keys_Django Admin - Fatal编程技术网

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页面,该页面按艺术家名称过滤。有什么建议吗?你的答案没有回答这个问题。太好了。非常感谢:-)太好了。非常感谢:-)