代码之家  ›  专栏  ›  技术社区  ›  Cubed Eye Qamar Aftab

Django:用另一个表的结果过滤对象?

  •  0
  • Cubed Eye Qamar Aftab  · 技术社区  · 15 年前

    我对如何在Django做这件事一无所知,希望你能帮忙。

    我有一张按类型筛选的库表:

    public_galleries = models.Gallery.objects.filter(type = 2).filter(root_gallery__isnull = True)
    

    但我还想看看对于特定用户来说,这个库是否不存在于user gallery表中。我为用户提供了以下库列表:

    user_galleries = models.UserGallery.objects.select_related().filter(clientuser=request.user.id).filter(gallery__root_gallery__isnull = True)
    

    注**刚开始将django用于一个真正的项目,因此对这些声明的任何改进都表示赞赏。

    编辑-模型:

    class Gallery(models.Model):
        """Gallery model"""
        name = models.CharField(u"Gallery name", max_length=120)
        type = models.IntegerField(default=0, choices=TYPE_CHOICES)
        root_gallery = models.ForeignKey("self", blank=True, null=True)
        """ Other Fields"""
    
    class UserGallery(models.Model):
        """Model to link Gallery and ClientUser"""
        gallery = models.ForeignKey(Gallery)
        clientuser = models.ForeignKey(ClientUser)
        owner = models.BooleanField(default=False)
    
    3 回复  |  直到 13 年前
        1
  •  5
  •   Mayuresh    15 年前
    Gallery.objects.filter(type = 2).filter(root_gallery__isnull = True).exclude(id__in = [x.id for x in request.user.usergallery_set()])
    

        2
  •  3
  •   bcattle    13 年前

    user_galleries

    extra() WHERE

    private_galleries = Gallery.objects.filter(type=1, root_gallery__isnull=True) \
        .extra(where=['''
            yourapp_gallery.id NOT IN (SELECT id FROM 
                ...long query used to generate user_galleries...  )
        '''])
    

    where=

    here

        3
  •  0
  •   Cubed Eye Qamar Aftab    15 年前

    private_galleries = models.Gallery.objects.filter(type = 1).filter(root_gallery__isnull = True).exclude(id__in = [x.gallery.id for x in user_galleries])