簡體   English   中英

Django:兩種不同模型的分頁

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM