如何生成从艺术家个人资料页面到 genre/trait 页面的链接

How to generate links from artist profile page to genre/trait pages

我正在尝试制作流派和特征的可点击链接,这些链接转发到包含与给定 trait/genre 相关的所有艺术家列表的页面。

这是我的艺术家个人资料页面模板

<h1>{{artist.stage_name}}</h1>
<h6>{{artist.real_name}}</h6>
<hr>
Genre:<a href="">{{artist.artist_genre}}</a>
<br>
Tratis:{{artist.artist_trait.all|join:", "}}

这是我目前的看法。我必须分别查询流派和特征吗?

def ArtistProfileView(request, pk):
    artist = Artist.objects.get(id=pk)
    context = {'artist':artist, }
    return render(request, 'artist/artist_profile.html', context)

这些是我的模型

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, related_name='artists')
    artist_trait = models.ManyToManyField(ArtistTrait, related_name='artists')
    date_added = models.DateField(auto_now_add=True, null=True)
    def __str__(self):
        return self.stage_name 
    def get_absolute_url(self):
        return reverse('profile_artist', kwargs={'pk': self.pk})

这些是我的网址

urlpatterns = [
    path('', views.ArtistIndex, name='index_artist'),
    path('artists/', views.ArtistListView.as_view(), name='artist_list'),
    path('profile/<int:pk>/', views.ArtistProfileView, name='profile_artist'),
    path('new/', views.ArtistCreateView.as_view(), name='new_artist'),
    path('edit/<int:pk>/', views.ArtistUpdateView.as_view(), name='edit_artist'),
    path('delete/<int:pk>/', views.ArtistDeleteView.as_view(), name='delete_artist'),
    path('genres/', views.GenreListView.as_view(), name='genre_list'),
    path('genre/<int:pk>/', views.GenreProfileView, name='genre_profile'),
    path('traits/', views.TraitListView.as_view(), name='trait_list'),
    path('trait/<int:pk>/', views.TraitProfileView, name='trait_profile')
]

谢谢。

您只需稍微更改一下模板即可。

<h1>{{artist.stage_name}}</h1>
<h6>{{artist.real_name}}</h6>
<hr>


    
Genre:<a href="{{artist.artist_genre.get_absolute_url}}">{{artist.artist_genre}}</a>
<br>
Tratis:
{% for trait in artist.artist_trait.all%}
<a href="{{trait.get_absolute_url}}">{{trait.trait_name}}</a>, 
{% endfor %}

此外,您的 get_absolute_url 流派和特质方法都存在问题。 genre_detailtrait_detail 应该是 genre_profiletrait_profile。或者,您也可以将网址的 name 参数分别更改为 genre_detailtrait_detail