Django文檔不太清楚如何過濾對象,使它們包含相關字段的過濾子集。Django模型與相關字段的過濾子集
假設我有以下型號:
class Device(models.Model):
name = models.CharField(max_length=50)
class DeviceEvent(models.model):
device=models.ForeignKey(Device, null=False, related_name='device_events')
handled = models.BooleanField(default=Fasle)
現在假設我希望檢索有未處理的DeviceEvents所有設備的列表。我如何在Django中編寫查詢來做到這一點?
最終結果應該是設備,其中devices是Device對象的列表,並且對於每個設備對象「device」,我們有device.device_events是未處理的DeviceEvent對象的列表。這可能在Django中做到嗎?
或者,我可以做到這一點在Python這樣的:
all_devices=Device.objects.all()
devices=[]
for thedevice in all_devices:
unhandled_device_events=thedevice.device_events.\
annotate(num_events=Count('device_events')).\
filter(device_event__device=thedevice).\
filter(num_events__gt=0).\
filter(device_event__handled=False).all()
if unhandled_device_events:
thedevice.device_events=unhandled_device_events
devices.append(thedevice)
在上面,我創建了一個名爲設備的新列表,然後通過所有設備對象循環和手動添加設備到設備,只有當它至少有一個未處理的事件,並且該設備對象現在具有device.device_events =未處理的設備事件(不是所有設備事件)。這是允許的還是高效的?
或者當我將其中一個device_events稱爲「device_event」而不是「deviceevent」時,它是正確的?
沒有,返回一個設備對象,而進去的語法看起來是錯誤的。 – Marc
你確定嗎?你有沒有測試過它?爲什麼裏面的代碼看起來錯了? :) –