2011-03-29 107 views
1

我想更新Django中的一个对象,如果它只有一个一对多关系(父对象,它正在被软删除。)查询一对多相关对象数量的Django对象

有没有办法查询一个对象来找出它有多少个多对多的关系?

这是我尝试(失败):

pages = Page.objects.filter(accounts=accountid) 
    for page in pages: 
     if page.accounts.all().count == 1: 
      page.deleted = 1 
      user.save() 

感谢。

+1

我想你在你的代码中有几个拼写错误。第一。 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

回答

2

不知道你的模式,但在我例如汽车对象有FK到用户卡列斯“用户”:

User.objects.annotate(num_cars =计数(“车”))过滤器(num_cars = 1) 这给你只有一辆车的用户。

http://docs.djangoproject.com/en/dev/topics/db/aggregation/#joins-and-aggregates

+0

建立你的答案,我认为他们可以减少他们的代码到这样的东西。 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

+0

好帖子。谢谢:) – pyeleven 2011-03-29 18:20:45