這些都是等被定義模式:Django中篩選出最新記錄
from django.db import models
class Foo(models.Model):
name = models.CharField(max_length=100)
def __unicode__(self):
return u'%s' % self.name
def latest_bar(self):
try:
return self.bar_set.latest()
except Bar.DoesNotExist:
return None
class Bar(models.Model):
name = models.CharField(max_length=100)
foo = models.ForeignKey(Foo)
created_date = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return u'%s' % self.name
class Meta:
ordering = ('-created_date',)
get_latest_by = 'created_date'
然後記錄被創建爲:
f1 = Foo.objects.create(name="F1")
f1.save()
f2 = Foo.objects.create(name="F2")
f2.save()
f3 = Foo.objects.create(name="F3")
f3.save()
b1 = Bar.objects.create(name='B1', foo=f1)
b1.save()
b2 = Bar.objects.create(name='B2', foo=f1)
b2.save()
b3 = Bar.objects.create(name='B3', foo=f1)
b3.save()
b4 = Bar.objects.create(name='B4', foo=f2)
b4.save()
b5 = Bar.objects.create(name='B5', foo=f2)
b5.save()
b6 = Bar.objects.create(name='B6', foo=f3)
b6.save()
b7 = Bar.objects.create(name='B7', foo=f3)
b7.save()
我想要得到的是最新的「酒吧的所有」富的,這是
[f1.latest_bar(), f2.latest_bar(), f3.latest_bar()]
=> [<Bar: B3>, <Bar: B5>, <Bar: B7>]
,因爲可能有大量的Foo,如果我這樣做的:
bars = []
for f in Foo.objects.all():
b = f.latest_bar()
if b:
bars.append(b)
可能會花費很多時間,是否有可能通過使用queryset過濾器來實現這一點?
我們需要更多的信息。發佈您的'models.py',以便我們知道如何構建查詢。對於1.你會做類似'model.objects.values('name')'。查看關於查詢的django文檔[這裏](https://docs.djangoproject.com/en/dev/ref/models/querysets/)。 – agconti
謝謝,我用更新的示例更新了我的問題,並且需求也改變了。 – vts