[英]Django : pagination for two different models
我正在研究Django(v1.11.0)項目,並且有兩個名為Song的模型,其中包含用戶歌曲,而GenericSong則包含管理歌曲。
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
song_title = models.CharField(max_length=250)
audio_file = models.FileField()
is_favorite = models.BooleanField(default=False)
def __str__(self):
return self.song_title
class GenericSong(models.Model):
album = models.ForeignKey(GenericAlbum, on_delete=models.CASCADE)
song_title = models.CharField(max_length=250)
audio_file = models.FileField(default='')
is_favorite = models.BooleanField(default=False)
def __str__(self):
return self.song_title
我想列出數據庫中包含用戶和管理歌曲的所有歌曲,問題是,我想分頁列出這些歌曲。 我這樣做是針對一個僅包含使用此視圖的用戶歌曲的頁面,該頁面工作得很好:
@login_required()
def songs(request, filter_by=None):
users_songs = Song.objects.filter(album__user=request.user)
page = request.GET.get('page', 1)
if filter_by == 'favorites':
users_songs = users_songs.filter(is_favorite=True)
paginator = Paginator(users_songs, 10)
try:
songs_page = paginator.page(page)
except PageNotAnInteger:
songs_page = paginator.page(1)
except EmptyPage:
songs_page = paginator.page(paginator.num_pages)
return render(request, 'music/songs.html', {
'song_list': songs_page,
'filter_by': filter_by,
})
但是在第二種視圖中,我不知道如何在一個變量中制作歌曲和通用歌曲來進行分頁,這是我要對其進行更改的所有歌曲視圖:
@login_required()
def all_songs(request, filter_by=None):
users_songs = Song.objects.all()
generic_songs = GenericSong.objects.all()
return render(request, 'music/songs.html', {
'song_list_all': users_songs,
'generic_song_list': generic_songs,
'filter_by': filter_by,
})
您有兩個相同的模型。 將它們合並為一個並添加類型:
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
song_title = models.CharField(max_length=250)
audio_file = models.FileField()
is_favorite = models.BooleanField(default=False)
types = models.PositiveIntegerField(choices=SONG_TYPES, blank=True, null=True, default=1)
def __str__(self):
return self.song_title
然后像往常一樣使用分頁器給用戶
admin_songs = Song.object.filter(type=1)
other_songs = Song.object.filter(type=2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.