查询一对多相关对象数量的Django对象
我想更新Django中的一个对象,如果它只有一个一对多关系(父对象,它正在被软删除。)查询一对多相关对象数量的Django对象
有没有办法查询一个对象来找出它有多少个多对多的关系?
这是我尝试(失败):
pages = Page.objects.filter(accounts=accountid)
for page in pages:
if page.accounts.all().count == 1:
page.deleted = 1
user.save()
感谢。
不知道你的模式,但在我例如汽车对象有FK到用户卡列斯“用户”:
User.objects.annotate(num_cars =计数(“车”))过滤器(num_cars = 1) 这给你只有一辆车的用户。
http://docs.djangoproject.com/en/dev/topics/db/aggregation/#joins-and-aggregates
建立你的答案,我认为他们可以减少他们的代码到这样的东西。 Page.objects.annotate(num_accounts = Count('accounts'))。filter(num_accounts = 1).update(deleted = 1) 使用更新函数。 http://docs.djangoproject.com/en/1.3/topics/db/queries/#topics-db-queries-update – 2011-03-29 17:33:59
好帖子。谢谢:) – pyeleven 2011-03-29 18:20:45
我想你在你的代码中有几个拼写错误。第一。 page.accounts.all()。count应该是page.accounts.all()。count()并且你有user.save(),你可能需要page.save()。不知道你的模型是什么样的,但如果page.deleted是一个布尔值,你应该有page.deleted = True而不是page.deleted = 1. – 2011-03-29 17:27:11