我有一个bookingrecordsView
视图,可以在其中获取用户的所有保留。我添加了一个模型函数is_pending()
,该函数获取一个预留实例,检查date_to
字段是否已通过,并返回一个字符串。
获取预留的视图:
def bookingrecordsView(request):
rsv = Reservation.objects.filter(user=request.user)
return render(request, 'booking_history_page.html', {'rsv': rsv})
以及检查日期的功能:
class Reservation (models.Model):
....
@property
Def is_pending(self):
if self.date_to < datetime.date.today():
return "Pending"
else:
return "Over"
这是我的模板片段:
{% for r in rsv %}
<tr>
<td>{{ r.id }}</td>
<td>{{ r.date_from }} - {{ r.date_to }}</td>
<td>{{ r.time_from }} - {{ r.time_to }}</td>
<td>{{ r.chosen_vehicle }}</td>
<td>{{ r.garage }}</td>
<td>{{ r.destination }}</td>
<td>{{ r.is_pending }}</td>
</tr>
{% endfor %}
现在,对于所有预订,即使是几个月前通过的预订,此status
始终返回“待处理”。
如何从Reservation
函数中为每个is_pending()
实例获取正确的返回值,并将其相应地传递给模板?
答案 0 :(得分:1)
为什么这么复杂?
class Reservation(models.Model):
...
@property
def is_pending(self):
return self.date_to < datetime.date.today()
摆脱该功能,并将此属性作为模板中的常规字段引用。像这样:
{{ r.is_pending }}
您可以更改此功能以使其返回状态描述或在模板中实现(转换为“待处理”,“结束”)。
答案 1 :(得分:0)
您没有适当考虑每个预订,而是想做更多类似的事情:
def bookingrecordsView(request):
rsv = Reservation.objects.filter(user=request.user)
condition = checkIfPending(rsv)
return render(request, 'booking_history_page.html', {'rsv': rsv})
checkIfPending
功能
def checkIfPending(rsv):
for r in rsv:
if r.date_to < datetime.date.today():
r.status = "Pending"
else:
r.status = "Over"
和模板
{% for r in rsv %}
<tr>
<td>{{ r.id }}</td>
<td>{{ r.date_from }} - {{ r.date_to }}</td>
<td>{{ r.time_from }} - {{ r.time_to }}</td>
<td>{{ r.chosen_vehicle }}</td>
<td>{{ r.garage }}</td>
<td>{{ r.destination }}</td>
<td>{{ r.status }}</td> <-- Placed 'status' here
</tr>
{% endfor %}
或者,您也可以在status
模型中定义一个Reservation
方法,您可以使用r.status
或类似方法直接访问该方法。这样可以避免只为设置此值而遍历所有保留。