我们得到捆绑相关的1:n跟踪。跟踪已“创建”时间戳和“状态”字段。
必须能够通过状态获得Bundle才意味着只有具有与其相关状态的跟踪的捆绑包和具有状态的跟踪是捆绑的最新(最新)一个捆绑(按“创建”排序“田野”
我们有一些实现但是通过django orm在数据库级别上最好的方法是什么,最小化sql查询的数量。
编辑:模型代码:
class Tracking(DateStampableBase):
NEW = 0
PROCESSING_AT_FC = 1
PACKED = 2
SHIPPED_TO_PARTICIPANTS = 3
DELIVERED_TO_PARTICIPANTS = 4
SHIPPED_TO_LAB = 5
DELIVERED_TO_LAB = 6
BUNDLE_STATUSES = (
(NEW, 'new'),
(PROCESSING_AT_FC, 'processing_at_fc'),
(PACKED, 'packed'),
(SHIPPED_TO_PARTICIPANTS, 'shipped_to_participants'),
(DELIVERED_TO_PARTICIPANTS, 'delivered_to_participants'),
(SHIPPED_TO_LAB, 'shipped_to_lab'),
(DELIVERED_TO_LAB, 'delivered_to_lab'),
)
status = models.PositiveSmallIntegerField(choices=BUNDLE_STATUSES, default=NEW)
bundle = models.ForeignKey(Bundle)
class Bundle(DateStampableBase):
pass
class DateStampableBase(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
答案 0 :(得分:0)
在不知道模型结构的情况下,我猜您最好选择使用select_related
。这样,您只需命中一次DB即可获得完全填充的Queryset,并使用过滤器,排序等处理该查询集。
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#select-related
编辑:如果我理解正确,你想要这个:
Bundle.objects.filter(tracking__status=1).order_by("tracking__created")
其中1
是您要过滤的状态输入。