如何在Django模型中获得唯一值?

2024-09-29 01:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个型号:在

class Shipment(models.Model):
    job_id = models.CharField(max_length = 255)
    time = models.DateTimeField(auto_now = True, auto_now_add = True, db_index = True)

class ShipmentBagSealMapping(models.Model):
    bag_seal = models.CharField(max_length = 255)
    status = models.CharField(max_length = 255, default = 'open')
    time = models.DateTimeField(auto_now = True, auto_now_add = True, db_index = True)
    shipment_id = models.ForeignKey('Shipment', related_name = 'bags')

class ShipmentPPTLMapping(models.Model):
    pptl_id = models.CharField(max_length = 255)
    time = models.DateTimeField(auto_now = True, auto_now_add = True)
    shipment_id = models.ForeignKey('Shipment', related_name = 'pptls')

我想取一下已经关闭的行李的数量。

最初我有pptl_id。因此,我从ShipmentPPTLMapping模型得到shipment_id,然后用shipmen_id查询{}模型。在

这是我所拥有的完成:在

袋子关闭=长度(Shipment.objects.filter(行李状态精确='关闭',行李时间范围=[开始时间,结束时间],pptls_upptl_id_u准确=pptls.pptl_标识))在

问题是因为每个包可以有多个装运,因此目前根据我的查询,我能够得到所有已关闭的装运计数。我想添加另一个过滤器,比如bags_value = distinct

有点像

^{pr2}$

问题2

另外,我需要得到last_bagged_on参数,它给出最后一个关闭的包的时间。显然,这个字段将从ShipmentBagSealMapping模型获取,但我当前的对象是模型Shipment。在

我怎么才能把最后一个袋子关上?

有点像这:在

last_bagged_on  = Shipment.objects.filter(bags__status__exact = 'close', bags__time__range = [start_time,end_time],pptls__pptl_id__exact = pptls.pptl_id)[0].**bags_time**

Tags: 模型idtrueautotimemodels时间length
1条回答
网友
1楼 · 发布于 2024-09-29 01:32:58

1号

len(queryset)是一种不好的依赖对象的方法。请改用.count()

bags_closed = Shipment.objects.filter(bags__status__exact='close', 
                                      bags__time__range=[start_time,end_time],
                                      pptls__pptl_id__exact = 147)\
                              .distinct('bags').count()

第二

^{pr2}$

如果使用的是django1.6,应该使用last_gged_on=ShipmentBagSealMapping…first()而不是[0]

相关问题 更多 >