[英]Django: Get all objects and the first record of a related model
最初,我只是使用所有camera
型號:
cameras = Camera.objects.all()
return render(request, 'myapp/cameras.html', {'content': cameras})
但是我現在還需要為上面的語句中調用的每個Camera
包括CameraLog
的最新記錄。 CameraLog
具有與其關聯的Camera
的外鍵。
我需要將這些攝像機傳遞給視圖,因此不僅需要遍歷Camera
數據,還需要CameraLog
日志。
我是Python的新手,所以我相信這對您來說是一個簡單的修改...
cameras = Camera.objects.all( and also the latest CameraLog )
您可以像這樣創建模型屬性。
class Camera(models.Model):
fields = models.Fields()
@property
def last_log(self):
return self.cameralog_set.first()
現在在您的模板中:
{% for camera in cameras %}
#show camera info
{{ camera.last_log }}
# show camera log info
{% endfor %}
您還可以使用prefetch_related並使用django Prefetch()來指定queryset來實現最佳效果。
您只需要執行以下操作:
cameras = Camera.objects.all()
last_logs = [camera.cameralog_set.last for camera in cameras]
換句話說,您的攝像機的CameraLog已設置,您可以使用cameralog_set
屬性訪問它們。
請記住,您可以通過訪問相關領域<relatedfieldname>_set
並與所有元素.all()
先用.first()
和最后用.last()
更新
在您的模板中,您可以執行完全相同的操作
{% for camera in cameras %}
#show camera info
{% for log in camera.cameralog_set.all %}
# show camera log info
{% endfor %}
{% endfor %}
因此,您只需要將cameras
變量傳遞給模板
我認為,如果您很好地定義模型,則可以從該相機實例本身獲取與特定相機相關的所有相機日志。
因此,例如,如果您的模型定義如下:
from django.db import models
class Camera(models.Model):
name = models.CharField()
class CameraLogs(models.Model):
cameralog = models.ForeignKey(
Camera, related_name='cameralogs')
因此,如果您有一個與camera相等的特定Camera實例,則說camera.cameralogs.all()
應該返回屬於該Camera實例的所有cameralog。 您可以在這里https://docs.djangoproject.com/en/1.10/topics/db/examples/many_to_one/了解有關Django多對一關系的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.