如何为在Django中具有多个值的多对多属性的模型创建过滤器查询集
描述: - 我想过滤所有作者为john & paul的条目。以下是我正在使用的模型。任何人都可以解决这个问题:如何为在Django中具有多个值的多对多属性的模型创建过滤器查询集
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def str__(self): # unicode__ on Python 2
return self.name
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def str__(self): # unicode__ on Python 2
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField()
authors = models.ManyToManyField(Author)
n_comments = models.IntegerField()
n_pingbacks = models.IntegerField()
rating = models.IntegerField()
def str__(self): # unicode__ on Python 2
return self.headline
只是过滤两次(如@ dnit13说)。它的唯一途径
Entry.objects.all().filter(authors__name='john').filter(authors__name='paul')
如果作者的名单是动态的:
authors = ['john', 'paul']
entries = Entry.objects.all()
for author in authors:
entries = entries.filter(authors__name=author)
我已经尝试过这种方法,但是我们仍然不会得到所有这些作者都在那里的条目。 –
只需使用过滤器两次
Entry.objects.filter(authors__name='john').filter(authors__name='paul')
我不喜欢这种方式,好像会有更多的作者,那么我们的查询会很长。所以我们需要一些其他具体的方法来解决这样的查询。但仍然谢谢你的答案。 –
另一种方式是使用Q对象,我怀疑它会适用于这种情况 – dnit13
由于Q对象主要用于使用OR操作的复杂查询,因此无法在此处工作。 –
'Entry.objects.filter(authors__in = [Author.objects.get( name ='John'),Author.objects.get(name ='Paul')])。distinct()' –
这是不可能的。我们希望所有这些作者都在那里。 –
@BurhanKhalid你为什么把问题标记为已经存在。如果它已经存在,你可以在这里给出正确的答案。 –