在Django中搜索和计算匹配条件的记录

时间:2009-11-04 20:23:34

标签: django search

我想在我的应用程序中找到某些数据库字段的排序列表,例如说年份(我将记录所有记录的年份,总计显示如下:2009年(10),2008年(3) )等等,然后点击某一年将显示这些记录。

我该怎么做?

编辑1

class Year(models.Model):
  year = models.PositiveSmallIntegerField()

  def __unicode__(self):
     return unicode(self.year)

class CommonVehicle(models.Model):
  year = models.ForeignKey(Year)
  series = models.ForeignKey(Series)

  def __unicode__(self):
    name = ''+str(self.year)+" "+str(self.series)
    return name 

class Vehicle(models.Model):
   stock_number = models.CharField(max_length=6, blank=False)
   vin = models.CharField(max_length=17, blank=False)
   common_vehicle = models.ForeignKey(CommonVehicle)

   def __unicode__(self):
     return self.stock_number

2 个答案:

答案 0 :(得分:1)

摘要列表的查询应如下所示(仅限Django 1.1+):

from django.db.models import Count
Widget.objects.order_by('year').values('year').annotate(count=Count('id'))

这将返回一个字典列表,如下所示:

[{'count': 3, 'year': 2006}, {'count': 1, 'year': 2007}, {'count': 2, 'year': 2009}]

您可以在模板中轻松迭代以生成链接列表:

{% for item in year_counts %}
  <li><a href="{% url year_view year=item.year %}">{{ item.year }} ({{ item.count }})</a></li>
{% endfor %}

“year_view”是您创建的视图,它接受“年”参数并显示已过滤的对象列表,如:

Widget.objects.filter(year=year)

答案 1 :(得分:0)

不确定这是否有帮助,但您只需执行以下操作即可计算过滤查询中的对象数:

this_year = Widget.object.filter(you_date_field__year=2009).count()