gpt4 book ai didi

python - django 以每周每月每天的方式对查询元素进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:27 24 4
gpt4 key购买 nike

我正在获取人员列表以及他们从同一项目中的 API 进行的测试。我希望用户可以通过三个选项(每天/每周/每月)查看一个城市进行的测试数量。

模型.py

class City(models.Model):
city_name=models.CharField(max_length=100,default='',blank=False)

class Person(models.Model):
title = models.CharField(max_length=3,default="mr",blank=False)
name = models.CharField(max_length=50,default='',blank=False)
address = models.CharField(max_length=200,default='',blank=False)
city = models.ForeignKey(City)
class Test(models.Model):
person = models.ForeignKey(Person)
date = models.DateTimeField(auto_now_add=True)
test_name = models.CharField(max_length=200,default='',blank=False)
subject = models.CharField(max_length=100,default='')

每个城市的人的json文件是这样生成的http://pastebin.com/pYLBjrjh

相关views.py

def personlist(request, id):
data = requests.get('http://127.0.0.1:8000/app/cities/' + id + '/persons/').json()
context = RequestContext(request, {
'persons': data['results'],'count': data['count'],
})

return render_to_response('template.html', context)

这会生成该城市中已参加测试的姓名列表。我想知道有没有办法让用户选择时间段(每天/每周/每月),只查看该时间段内参加过考试的名字。

最佳答案

为了能够通过人员模型进行测试,您可以定义自己的 related_name例如tests或者只使用 django 提供的默认值 test_set :

class Test(models.Model):
person = models.ForeignKey(Person, related_name='tests')
date = models.DateTimeField(auto_now_add=True)
test_name = models.CharField(max_length=200,default='',blank=False)
subject = models.CharField(max_length=100,default='')

related_name 定义反向关系,以便您可以执行以下查询:

  person_1.tests.all()
person_1.tests.filter(date=date)
person_1.tests.filter(date__day=day) # day is an integer
person_1.tests.filter(date__month=month) # month is an integer

但默认不支持周,但您仍然可以使用range 功能:

import datetime
start_date = datetime.date(2015, 12, 16)
end_date = start_date + datetime.timedelta(days=7)
person_1.tests.filter(date__range=(start_date, end_date))

示例:

views.py 中:

def get_current_month():
now = datetime.now()
return now.strftime("%m")

def get_current_year():
now = datetime.now()
return now.strftime("%y")

def tests_by_month(request, id):
person = Person.objects.get(id=id)
month = request.GET.get('month', get_current_month()) # if no month take the current as default
year = request.GET.get('month', get_current_year()) # if no year take the current as default
test_list = person.tests.filter(date__month=int(month), date__year=int(year))
context = {'test_list': test_list}
return render_to_response(request, 'template.html', context)

urls.py 中:

url(r'^app/persons/(?P<id>\d+)/tests/', tests_by_month),

并且您使用以下网址

app/persons/(?P<id>\d+)/tests/?month=12&year=2014

如果您发送时没有月份:app/persons/(?P<id>\d+)/tests/您将获得当月和当年的测试

关于python - django 以每周每月每天的方式对查询元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com