为了通过人员模型访问测试,您可以定义自己的相关名称 https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.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
但没有默认支持 week,但您仍然可以使用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))
例子 :
in 视图.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)
in 网址.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/
您将获得当月和当年的测试