我有这样的Book模型:
class Book(models.Model):
authors = models.ManyToManyField(Author, ...)
...
简而言之:
我想检索作者严格等于给定作者集的书籍。我不确定是否有单个查询可以执行此操作,但是任何建议都会有所帮助。
总而言之:
这是我尝试过的((无法运行得到AttributeError)
# A sample set of authors
target_authors = set((author_1, author_2))
# To reduce the search space,
# first retrieve those books with just 2 authors.
candidate_books = Book.objects.annotate(c=Count('authors')).filter(c=len(target_authors))
final_books = QuerySet()
for author in target_authors:
temp_books = candidate_books.filter(authors__in=[author])
final_books = final_books and temp_books
…这就是我得到的:
AttributeError: 'NoneType' object has no attribute '_meta'
总的来说,我应该如何像在我的案例中那样在其ManyToMany字段包含一组给定对象的约束下查询模型?
ps:我发现了一些相关的SO问题,但找不到清晰的答案。任何好的指针也将有所帮助。谢谢。
我找到了一个解决方案。但是,我认为效率可以提高。
# A sample set of authors
target_authors = set((author_1, author_2))
# To reduce the search space, first retrieve those books with just 2 authors.
candidate_books = Book.objects.annotate(c=Count('authors')).filter(c=len(target_authors))
# In each iteration, we filter out those books which don't contain one of the
# required authors - the instance on the iteration.
for author in target_authors:
candidate_books = candidate_books.filter(authors=author)
final_books = candidate_books
问题内容: 假设我有以下型号 在一个视图中,我有一个带有活动过滤器的列表,称为category。我想过滤所有具有类别标签的照片对象。 我试过了: 但这匹配类别中的任何项目,而不是所有项目。 因此,如果类别是[‘holiday’,’summer’],我希望Photo带有假日和夏季标签。 能做到吗? 问题答案: 正如jpic和sgallen在评论中所建议的那样,可以.filter()为每个类别添加一个
问题内容: 我有一个与另一个对象具有多对多关系的对象。 在Django Admin中,这会在多重选择框中产生很长的列表。 我想过滤掉ManyToMany关系,所以我只获取客户选择的城市中可用的类别。 这可能吗?我需要为其创建一个小部件吗?如果是这样,我该如何将行为从标准ManyToMany字段复制到该字段,因为我也希望filter_horizontal函数。 这些是我的简化模型: 问题答案:
问题内容: 如何获得AngularJS中过滤器预测返回的项目的长度/数量? 问题答案: 感谢Pawel Kozlowski,我设法在AngularJS Google网上找到了一个不错的答案。 可以动态创建列表,您可以使用当前范围中的其他任何位置来显示计数。
问题内容: 我开始使用django-tables2(从第一印象中就可以强烈推荐),我问自己如何实现列过滤。我找不到合适的文档,但是我确定它在那里。 问题答案: 答案有点晚了,但是无论如何…我也找不到任何合适的文档来进行列过滤。有很多方法可以做到这一点: 答:手动:我添加了一个包含要过滤的字段的表单,然后在我的视图中执行以下操作: 这很好用,但是不是那么干,因为它在视图中是硬编码的。 B.使用Sin
在这种情况下,我需要根据项的某些属性(即条件是内部的而不是外部的)筛选。我发现javafx有,所以我尝试了一下。我可以设置谓词和筛选工作,直到确定筛选的属性值发生变化。现在可以像下面这样设置谓词: 由于谓词返回boolean而不是BooleanProperty,因此对该属性的更改不会反映在列表中。 对此有什么简单的解决办法吗?我可以尝试做一些变通方法,例如创建一个单独的列表并同步它,或者每次属性在
问题内容: 我有一个带有自引用外键关系的模型: 现在,我想为一个人获得所有多层次的孩子。如何为它编写Django查询?它需要表现得像递归函数。 问题答案: 你可以随时向模型添加递归函数: 编辑:根据韩善基更正 (如果你有大量的递归或数据,请不要使用它。) 仍然建议errx建议的mptt。