python - django多对多查询
问题描述
我正在尝试创建一个可以帮助我存储旧音乐的应用程序。这些是我的模型。
class ArtistGenre(models.Model):
genre_name = models.CharField('Genre', max_length=20)
def __str__(self):
return self.genre_name
def get_absolute_url(self):
return reverse('genre_detail', kwargs={'pk': self.pk})
class ArtistTrait(models.Model):
trait_name = models.CharField('Trait', max_length=20)
def __str__(self):
return self.trait_name
def get_absolute_url(self):
return reverse('trait_detail', kwargs={'pk': self.pk})
class Artist(models.Model):
stage_name = models.CharField('Stage Name', max_length=255)
real_name = models.CharField('Birth Name', max_length=255, blank=True)
artist_genre = models.ForeignKey(ArtistGenre, on_delete=models.CASCADE)
artist_trait = models.ManyToManyField(ArtistTrait)
def __str__(self):
return self.stage_name
def get_absolute_url(self):
return reverse('profile_artist', kwargs={'pk': self.pk})
我的问题是正确查询 ArtistGenre 和 ArtistTrait 模型,以创建可点击的链接,列出一个流派或具有特定特征的所有艺术家。我是否必须在链接到艺术家的 Trait 和 Genre 模型中创建多对多字段,或者我目前有办法查询它吗?谢谢你!
解决方案
你可能需要这样的东西:
class Artist(models.Model):
stage_name = models.CharField('Stage Name', max_length=255)
real_name = models.CharField('Birth Name', max_length=255, blank=True)
artist_genre = models.ForeignKey(ArtistGenre, on_delete=models.CASCADE, related_name='artists')
artist_trait = models.ManyToManyField(ArtistTrait, related_name='artists')
现在,从给定的流派或特征模型中,您将能够获得所有艺术家,因为该related_name
属性。
# Get all artists from the ArtistGenre -
genre = ArtistGenre.objects.first()
artists = genre.artists.all()
# Get all artists from ArtistTrait
artists = ArtistTrait.artists.all()
推荐阅读
- python - 从一开始就使用一元/二进制数据创建一个 csr_matrix
- android - 使用动态功能和构建风味时出现合并错误
- mysql - 在表中如何通过保持对另一列的引用来选择一列的不同值?
- javascript - Mongoose 函数记录正确的数据,但使用异步函数获取它返回未定义
- swift - 使用自动布局以编程方式将自定义 UIView 与视图对齐
- android - 应用程序语言没有完全改变
- jax-rs - 如何从 JSON 对象序列化中排除 Weld 元数据
- opencv - 在运行交叉编译的 cpp 二进制文件时运行 poky 2.1.3 的 h3ulcb 中未处理的 2 级转换错误
- r - 多个 R Shiny 进程
- javascript - Google-Sheets - 根据单元格值打破循环