【发布时间】:2021-09-17 10:17:22
【问题描述】:
我想在我的 Django 管理员中显示音乐专辑的相关流派,但我不确定我的查询应该是什么样子:
这是我的相册模型:
class MusicAlbums(models.Model):
objects = RandomManager()
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.TextField(verbose_name=_("Title"), blank=False, null=True, editable=False, max_length=255)
artist = models.ForeignKey(MusicArtists, on_delete=models.CASCADE, related_name='artist_relation')
album_artist = models.ForeignKey(MusicArtists, on_delete=models.CASCADE, related_name='album_artist_relation')
cover = models.ImageField(verbose_name=_("Cover"), blank=True, null=True, upload_to=get_file_path_images)
cover_tn = models.ImageField(verbose_name=_("Cover Thumbnail"), blank=True, null=True, upload_to=get_file_path_images)
release_date = models.DateField(verbose_name=_("Release Date"), blank=True, null=True, editable=False)
genre_relation = models.ManyToManyField(through='GenreMusicAlbum', to='Genre')
total_discs = models.IntegerField(verbose_name=_("Total Discs #"), blank=True, null=True,)
total_tracks = models.IntegerField(verbose_name=_("Total Tracks #"), blank=True, null=True,)
copyright = models.TextField(verbose_name=_("Copyright"), blank=True, null=True, editable=False, max_length=255)
date_added = models.DateTimeField(auto_now_add=True, blank=True, verbose_name=_("Date Added"))
我的 Glue Genre 助手类和 GenreMusicAlbum:
class GenreMusicAlbum(models.Model):
music_album = models.ForeignKey(MusicAlbums, on_delete=models.CASCADE, blank=True)
genre = models.ForeignKey(Genre, on_delete=models.CASCADE, blank=False, null=False)
最后是我的类型模型:
class Genre(models.Model):
objects = RandomManager()
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(verbose_name=_("Genre"), blank=True, null=True, editable=False, unique=True, max_length=50)
到目前为止一切顺利。现在我开始把所有这些都放到 Django admin 中
class MusicAlbumsAdmin(admin.ModelAdmin):
list_display = ['title', 'get_artist', 'get_album_artist', 'release_date', 'date_added']
ordering = ['title']
list_filter = ['title']
readonly_fields = ('get_artist', 'get_album_artist', 'cover',
'cover_tn', 'release_date', 'get_album_genre', 'total_discs',
'total_tracks')
exclude = ('artist', 'album_artist', 'genre_relation')
list_per_page = 1000
@display(description='Artist')
def get_artist(self, obj):
return obj.artist.title
@display(description='Album Artist')
def get_album_artist(self, obj):
return obj.album_artist.title
@display(description='Genre')
def get_album_genre(self):
print("I Have no Idea")
admin.site.register(MusicAlbums, MusicAlbumsAdmin)
提取 get_album_artist 似乎没有问题,因为它是 ForeignKey 但如何获取 ManyToManyField 值?
其实我想要这样的:
@display(description='Genre')
def get_album_genre(self, obj):
return obj.genre_relation.genre.name
但我想我在这里需要某种 for 循环构造,有什么想法吗?
【问题讨论】:
标签: django django-admin