我是Django的新手,所以也许我的尝试纯属异端;)
我正在尝试查看列出不负责任的会议室及其属性的视图,包括可用性。
我有2个模型:<input id="waffe1c.0.">
<input id="waffe1c.1.">
<input id="waffe1c.2.">
<input id="waffe1c.3.">
<input id="waffe1c.4.">
<input id="waffe1c.5.">
<input id="waffe1c.6.">
<input id="waffe1c.7.">
<input id="waffe1c.8.">
和Room
。我想在视图中有一列来说明在显示页面的那天房间是否可用。
我的Reservation
:
models.py
我的from django.utils import timezone
from django.db import models
class Room(models.Model):
name = models.CharField(max_length=255, unique=True)
capacity = models.IntegerField()
projector = models.BooleanField()
class Reservation(models.Model):
room = models.ForeignKey(Room, on_delete=models.CASCADE)
date = models.DateField()
comment = models.CharField(max_length=255)
class Meta:
unique_together = ('room', 'date',)
:
views.py
我的模板:
class ShowRoom(View):
def get(self, request):
rooms = Room.objects.all()
time_now = timezone.now().date()
context = {
'rooms': rooms,
'time_now': time_now
}
return render(request, 'rooms/list_rooms.html', context)
一切正常,我只需要用代码替换此{% extends 'rooms/base.html' %}
{% block block_title %} Home {% endblock %}
{% block block_content %}
{% if rooms %}
<table class="table">
<thead>
<td> Name </td>
<td> Capacity </td>
<td> Available </td>
<td> Projector </td>
</thead>
<tbody>
{% for room in rooms|dictsort:'capacity' %}
<tr>
<td> <a href="{% url 'rooms:detail_room' room_pk=room.pk %}">{{ room.name }}</a> </td>
<td> {{ room.capacity }} </td>
<td> Available? </td>
<td> {{ room.projector|yesno:'yes,no' }} </td>
</tbody>
{% endfor %}
</table>
{% else %}
<h1> You have no registered rooms yet. </h1>
{% endif %}
{% endblock %}
行,该代码将根据现有的房间预订显示“免费”或“已入住”。
我发现也许我应该编写一个自定义过滤器。
这是我的过滤器:
<td> Available? </td>
(我想先使其运行,然后使其显示“免费”或“已占用”。)
我已添加到模板from django import template
from rooms.models import Room, Reservation
register = template.Library()
@register.filter
def check_reservation(queryset, now):
return queryset.filter(date=now)
中,并替换了我要更改的行
{% load my_extras %}
输出为:
/ room / [<'time_now'值中的ValidationError具有无效日期 格式。它必须为YYYY-MM-DD格式。“]
在添加过滤器之前,我正在外壳中尝试此解决方案,并且该解决方案一直有效。
我不知道过滤器是否有问题,或者我尝试从错误的角度解决问题。
提前感谢您的提示。
答案 0 :(得分:1)
尝试向Room类添加另一个字段:
2017 SEP 10 10:15:27 - closest value in list : 2017 SEP 10 08:50:09
2017 SEP 10 10:20:22 - closest value in list : 2017 SEP 10 08:50:09
在视图中,您可以检查与预订关联的日期和今天的日期。
occupied = model.BooleanField(default=False)
然后您可以过滤可用和不可用的房间。
if reservation.date == time_now:
room.occupied = true
在模板中:
rooms_occupied = room.objects.filter(occupied=True)
rooms_available = room.object.filter(occupied=False)