我已经阅读并尝试了许多策略来使__range包含在内。请有人在这里帮忙
views.py
def generate_report(request):
if 'start_date' and 'end_date' in request.GET:
account_type = AccountUser.objects.get(user_id=request.user.id)
query_string_start = request.GET.get('start_date')
query_string_end = request.GET.get('end_date')
search_query = BedAllotment.objects.filter(hospital_id=account_type.hospital_id,
departure_date__gte=query_string_start, departure_date__lte=query_string_end).order_by('-departure_date')
return render (request, 'report/report_preview.html', {'account_type':account_type, 'query_data':search_query,
'query_string_start': query_string_start,
'query_string_end':query_string_end})
models.py
class BedAllotment(models.Model):
BILL_TO = (
('self', 'Self'),
('insurance', 'Insurance')
)
PAYMENT_MODE = (
('cash', 'Cash'),
('cheque', 'Cheque'),
('transfer', 'Transfer'),
('pos', 'POS'),
)
hospital = models.ForeignKey(Hospital)
patient = models.ForeignKey(PatientProfile)
bed = models.ForeignKey(BedCreate)
allotment_date = models.DateTimeField(auto_now_add=True)
departure_date = models.DateTimeField(blank=True, null=True)
days = models.IntegerField(null=True, blank=False)
amount = models.IntegerField(null=True, blank=False)
amount_paid = models.IntegerField(default=0, blank=False)
discount = models.IntegerField(default=0, blank=False)
status = models.BooleanField(default=False)
我想在end_date包括所有查询实例。请帮助
答案 0 :(得分:1)
如果我正确理解,depart_date
是DateTimeField
。现在,假设日期时间为2018-08-21 12:34
,那么它比2018-08-21
大,因为默认情况下,日期被假定为时间00:00
。>
不过,我们可以使用__date
查找,例如:
search_query = BedAllotment.objects.filter(
hospital_id=account_type.hospital_id,
departure_date__date__range=(query_string_start, query_string_end)
).order_by('-departure_date')
这意味着我们首先将departure_date
“转换”为等效的DateField
值,然后检查它是否在范围内。
请注意,日期/时间很复杂:日期取决于时区,因此,如果query_string_start
等位于另一个时区中,则数学运算可能不正确。因此,可能需要对获取的参数进行一些“预处理”。