我正在尝试显示相机对象及其最近的状态。我能够显示摄像头和最近的时间戳,但我正在努力访问相应的州字段。
我有以下Django模型。
class Camera(models.Model):
name = models.CharField(max_length=32)
class TimeStamp(models.Model):
camera = models.ForeignKey(Camera, on_delete=models.CASCADE)
state = models.BooleanField(default=False)
timeStamp = models.DateTimeField(db_index=True, auto_now_add=True, blank=True)
我有以下观点。
def index(request):
context = {
'cameras': Camera.objects.all().annotate(latest_timestamp=Max('timestamp__timeStamp')),
'functional': Camera.objects.annotate(latest_timestamp=Max('timestamp__timeStamp')).filter(latest_timestamp=F('timestamp__timeStamp'), timestamp__state=True),
'faulty': Camera.objects.annotate(latest_timestamp=Max('timestamp__timeStamp')).filter(latest_timestamp=F('timestamp__timeStamp'), timestamp__state=False),
}
return render(request, 'index.html', context)
在我的index.html中,我有
<table class="table table-hover">
<thead class="text-info">
<th>ID</th>
<th>Name</th>
<th>Current State</th>
<th></th>
</thead>
<tbody>
{% for camera in cameras %}
<tr>
<td>{{ camera.id }}</td>
<td>{{ camera.name }}</td>
<td>{{ camera.latest_timestamp }}</td>
</tr>
{% endfor %}
</tbody>
而不是camera.latest_timestamp,我想显示相应的状态字段。
答案 0 :(得分:1)
因为每个camera
可能有多个state
,所以您不能简单地{{ camera.state }}
。
而是执行以下操作:
{% for camera in cameras %}
<tr>
<td>{{ camera.id }}</td>
<td>{{ camera.name }}</td>
{% for timestamp in camera.timestamp %}
<td>{{ timestamp.state }}</td>
{% endfor %}
</tr>
{% endfor %}
答案 1 :(得分:1)
我会用这种方式定义我的Camera
模型:
class Camera(models.Model):
name = models.CharField(max_length=32)
@property
def latest_state(self):
latest_timestamp = self.timestamp_set.latest('timeStamp')
return latest_timestamp.state
并在模板中使用
{% for camera in cameras %}
<tr>
<td>{{ camera.id }}</td>
<td>{{ camera.name }}</td>
<td>{{ camera.latest_state }}</td>
</tr>
{% endfor %}
我没有测试它。