正在查找活动的ForeignKey并添加到QuerySet


class Control(models.Model):
    period = models.DurationField()
    active = models.BooleanField()
    device_collection = models.ForeignKey(DeviceSet)
class DeviceSet(models.Model):
    name = models.CharField()
    date_last_control = models.DateField()
    def get_next_control(self):
        return self.date_last_control + self.control_actif.period
    @property
    def control_actif(self):
        if not hasattr(self, "_control"):
            setattr(self, "_control", self.control_set.get(active=True))
        return self._control

有几个控件与DeviceSet关联,但只有一个控件由DeviceSet激活。当我在列_Control中获得queryset时,我想获得DeviceSet的活动控件。我已经试过了:

DeviceSet.objects.annotate(_control = Q(control__active=True))

这不起作用

'WhereNode' object has no attribute 'output_field'

在设置output_field=Control之后,我有以下异常:

type object 'Control' has no attribute 'resolve_expression'

我只想在一个新的列中使用模型方法中的_control属性。

由于annotate方法需要一个聚合函数(例如SumCount等(而不是Q对象,因此您尝试的操作会出错。

由于Django 1.7可以使用prefetch_related执行您想要的操作,请参阅此处的文档:https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.Prefetch

DeviceSet.objects.prefetch_related(
    Prefetch('control_set',
             queryset=Control.objects.filter(active=True),
             to_attr='_control')
)

相关内容

  • 没有找到相关文章

最新更新