【问题标题】:Django ORM JOIN queryDjango ORM JOIN 查询
【发布时间】:2014-06-13 13:14:38
【问题描述】:

我有 2 个模型

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



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

我想编写一个 JOIN 查询,它告诉我ShipmentBagSealMappingstatus = close 中的记录数以及Shipment 的时间在[start_time and end_time] 范围内。

这是我尝试过的:

total_bags = ShipmentBagSealMapping.objects.filter(shipments__time__range = [start_time,end_time],status='close').values('bag_seal').distinct().count()

但它会抛出一个错误说:-

Cannot resolve keyword 'shipments' into field. Choices are: bag_seal, id, shipment_id, status, time

我该怎么做?

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    应该这样做:

    total_bags = ShipmentBagSealMapping.objects.filter(shipment_id__time__range = [start_time,end_time],status='close').values('bag_seal').distinct().count()
    

    看到您已将该字段定义为shipment_id 而不是shipments

    【讨论】:

    【解决方案2】:

    Django 会自动在你的 ForeignKey 中添加 _id,所以做一些这样的改变可能会有所帮助

    class ShipmentBagSealMapping(model.Model):
    bag_seal = models.CharField(max_length = 255)
    status = models.CharField(max_length = 255 )
    time = models.DateTimeField( auto_now_add = True)
    shipments = models.ForeignKey('Shipment', related_name = 'bags')
    

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 2015-08-27
      • 2020-12-03
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2013-02-23
      • 2011-06-15
      相关资源
      最近更新 更多