2013-04-04 75 views
0

我需要的是查詢,它將返回一個由數字排序的文章列表,它是以文章對象的foos.all + bar.peaces的總和計算的。這裏是車型的外觀:django模型對象的總和和相關模型的模型字段作爲列表

class Article(models.Model): 
    name = models.CharField(max_length=150) 
    date = models.DateTimeField() 
    ... 

class Foo(models.Model): 
    article = models.ForeignKey(Article, related_name='foos') 
    user = models.ForeignKey(User, related_name='userfoos') 
    ... 

class Bar(models.Model): 
    article = models.OneToOneField(Article) 
    peaces = models.IntegerField(default=0) 
    ... 

所以我們說,X是文章的對象:

foo_num = Foo.objects.filter(article=X).count() 
bar_num = Bar.objects.get(article=X) 
bar_num = bar_num.peaces 
Y = bar_num + foo_num 

所以我需要通過Y

回答

1

下令articls的名單我會定義自己的排序方法:

def article_sort(article_object): 
    return len(article_object.foos.all()) + article_object.bar.peaces 

def view(): 
    articles = sorted(Article.objects.all(), key=article_sort) 

更多信息here

+0

看起來不錯但有錯誤查看全球名稱'article_sort'未定義 – Goran 2013-04-04 12:06:42

+0

請確保article_sort位於代碼視圖上方iirc – 2013-04-04 12:11:28

+0

但在更改爲key = Artice.article_sort後按預期工作。謝謝傑夫 – Goran 2013-04-04 12:22:14