代码之家  ›  专栏  ›  技术社区  ›  panchicore

如何在manytomanyfield中搜索相关项目?

  •  0
  • panchicore  · 技术社区  · 16 年前

    实际上有这个模型:

    class MusicFile(models.Model):
        file = models.FileField(upload_to="files")
    
        def exist_in_playlist(self, playlist_id):
            exist = False
            try:
                mp = PlayList.objects.get(id=playlist_id, items__id=self.id)
                exist = True
            except PlayList.DoesNotExist:
                pass
        return exist
    
    class PlayList(models.Model):
        items = ManyToManyField(MusicFile)
    

    MusicFile.exist_in_playlist 如果x MusicFile在y播放列表中,则返回我。

    1. 我可以选择写些什么吗? PlayList.items.exist(MusicFile) ?

    2. 如果没有,如果播放列表中有音乐文件,这是一个很好的搜索实现吗?

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Dmitry Shevchenko    16 年前

    您可以这样简化(在1.2中添加了exists()):

    def exist_in_playlist(self, playlist):
        return self.playlist_set.filter(pk=playlist).exists()
    
        2
  •  1
  •   Ludwik Trammer    16 年前
    if MusicFile.objects.filter(playlist=playlist_id).count() > 0:
        ...
    

    或者从另一边

    if PlayList.objects.filter(musicfile=musicfile_id).count() > 0:
        ...
    

    documentation about accessing related objects more examples of making queries using Many to Many relationships .

    推荐文章