【发布时间】:2018-10-17 14:18:38
【问题描述】:
我正在尝试仅根据父记录预取最新记录。
我的模型就是这样
class LinkTargets(models.Model):
device_circuit_subnet = models.ForeignKey(DeviceCircuitSubnets, verbose_name="Device", on_delete=models.PROTECT)
interface_index = models.CharField(max_length=100, verbose_name='Interface index (SNMP)', blank=True, null=True)
get_bgp = models.BooleanField(default=False, verbose_name="get BGP Data?")
dashboard = models.BooleanField(default=False, verbose_name="Display on monitoring dashboard?")
class LinkData(models.Model):
link_target = models.ForeignKey(LinkTargets, verbose_name="Link Target", on_delete=models.PROTECT)
interface_description = models.CharField(max_length=200, verbose_name='Interface Description', blank=True, null=True)
...
以下查询失败并出现错误
AttributeError: 'LinkData' object has no attribute '_iterable_class'
查询:
link_data = LinkTargets.objects.filter(dashboard=True) \
.prefetch_related(
Prefetch(
'linkdata_set',
queryset=LinkData.objects.all().order_by('-id')[0]
)
)
我考虑过获取 LinkData 并进行相关选择,但我不知道如何为每个 link_target_id 仅获取 1 条记录
link_data = LinkData.objects.filter(link_target__dashboard=True) \
.select_related('link_target')..?
编辑:
使用 rtindru 的解决方案,预取的似乎是空的。目前有 6 条记录,为 3 个 LinkTargets 中的每一个测试 1 条记录
>>> link_data[0]
<LinkTargets: LinkTargets object>
>>> link_data[0].linkdata_set.all()
<QuerySet []>
>>>
【问题讨论】:
-
你试过用
.distinct('link_target_id)`吗? -
NotImplementedError:此数据库后端不支持 DISTINCT ON 字段。我的开发环境使用 sqlite,我的实时站点使用 mysql
标签: python django django-queryset