python - 如果我有两个模型,模型 A 和模型 B,并且我希望模型 A 的字段平均值为模型 B 中字段的值

标签 python django math relationship psql

我有两个模型:

class Order(models.Model):
    truck = models.ForeignKey(Truck, on_delete=models.CASCADE, related_name='relation_truck',default=None)
    date= models.DateField()
    product=models.CharField(max_length=30)
    depot = models.CharField(max_length=10)
    volume = models.CharField(max_length=30, blank=True)
    volume_delivered = models.CharField(max_length=30, blank=True)
    order_status = models.CharField(max_length=50, blank=True)
    pub_date = models.DateTimeField(auto_now_add=True, blank=True)

还有另一个模型:

class LoadingDashboard(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='relation_loading',default=None,blank=True)
    product = models.CharField(max_length=3)
    loading_average = models.IntegerField(null=True)
    expect_quantity = models.IntegerField()
    loaded_quantity = models.IntegerField()
    remaining_quantity = models.IntegerField(null=True)
    total_trucks = models.IntegerField(null=True)
    loaded_trucks=models.IntegerField()
    remaining_trucks = models.IntegerField(null=True)

我想做一些数学运算,如下所示:

  1. 模型加载中的产品只有两个:PMS 和 AGO
  2. 型号订单中的产品也是 PMS 和 Ago
  3. 在型号订单中装载 PMS 的卡车的特定体积为 35000,交付量应略小于 35000,例如 34294
  4. 装载 AGO 的卡车的特定体积为 33000,volume_delivered 可以为例如 32294
  5. 我希望“已加载模型”中的“loading_average”字段是指定产品(AGO 或 PMS)的“volume_delivered”字段的平均值,因为它们具有不同的“volume_delivered”值除以 1000
  6. 模型加载中的expect_quantity是给定的,意味着我将决定该值
  7. 已加载模型中的已加载数量应为模型订单中所有已交付量的总和,并且 PMS 和 AGO 具有不同的已交付量,因此如果产品是 PMS 且与 AGO 相同,则仅应计算 PMS 模型订单中已交付量的总和
  8. remaining_quantity 应该是expect_quantity 和loaded_quantity 的差值
  9. total_trucks 应该是expect_quantity 和loading_average 的除法
  10. loaded_trucks 应该是模型订单中卡车的总和,并且应该有带有 PMS 的卡车和带有 AGO 的卡车。因此,如果模型中的产品为 PMS,则装载的卡车装载量应为模型订单中仅包含产品 PMS 的卡车总和减去产品 PMS 的total_trucks
  11. remaining_trucks 是满载卡车与total_trucks 的差值。

到目前为止我已经做到的是:

def loading_dashboard(request):
# import pdb; pdb.set_trace()
loaded = LoadingDashboard.objects.all()
for math in loaded.iterator():
    if math.product == 'PMS':
        volume = list(Order.objects.filter(product='PMS')
        .values_list('volume_delivered', flat=True))
        order = volume
        sum = 0
        for volume in order:
            sum = sum + int(volume)
        return sum
        total = sum
        trucks = Order.objects.filter(product='PMS').count()
        loading = Order.objects.filter(product='PMS', order_status='Loaded').count()
        math.loading_average = total / trucks / 1000
        math.total_trucks = math.expect_quantity / math.loading_average
        math.loaded_quantity = total / 1000
        math.remaining_quantity = math.expect_quantity - math.loaded_quantity
        math.loaded_trucks = loading
        math.remaining_trucks = math.total_trucks - math.loaded_trucks
return render(request, 'loadings_dashboard.html' , {'loaded': loaded})

我收到错误 AttributeError: 'int' 对象没有属性 'get' 。

最佳答案

我经过三天的研究解决了这个问题:

def loading_dashboard(request):
# import pdb; pdb.set_trace()

loaded = LoadingDashboard.objects.all()
for math in loaded:
    volume = list(Order.objects.filter(product='PMS')
    .values_list('volume_delivered', flat=True))
    order = volume
    sum = 0
    for volume in order:
        sum = sum + int(volume)

    trucks = Order.objects.filter(product='PMS').count()
    loading = Order.objects.filter(product='PMS', order_status='Loaded').count()

    volume_ago = list(Order.objects.filter(product='AGO')
    .values_list('volume_delivered', flat=True))
    order_ago = volume_ago
    sum_ago = 0
    for volume in order_ago:
        sum_ago = sum_ago + int(volume)

    trucks_ago = Order.objects.filter(product='AGO').count()
    loading_ago = Order.objects.filter(product='AGO', order_status='Loaded').count()
    if math.product == 'PMS':
        math.loading_average = sum // trucks // 1000
        math.total_trucks = math.expect_quantity // math.loading_average
        math.loaded_quantity = sum // 1000
        math.remaining_quantity = math.expect_quantity - math.loaded_quantity
        math.loaded_trucks = loading
        math.remaining_trucks = math.total_trucks - math.loaded_trucks
    elif math.product == 'AGO':
        math.loading_average = sum_ago // trucks_ago // 1000
        math.total_trucks = math.expect_quantity // math.loading_average
        math.loaded_quantity = sum_ago // 1000
        math.remaining_quantity = math.expect_quantity - math.loaded_quantity
        math.loaded_trucks = loading_ago
        math.remaining_trucks = math.total_trucks - math.loaded_trucks
return render(request, 'loadings_dashboard.html' , {'loaded': loaded})

关于python - 如果我有两个模型,模型 A 和模型 B,并且我希望模型 A 的字段平均值为模型 B 中字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54970523/

相关文章:

python - 为什么 defaultdict default_factory 默认为 None?

Django : Serving static files through nginx

python - 如何复制 Django 查询集

java - 对于大值,Math.pow 和 Math.sqrt 的工作方式不同吗?

python - 如何通过id合并Spark数据帧?

python - 如何找到最大可能的协方差矩阵,或具有非缺失成对协方差的最大列集

django Rest框架通过POST创建嵌套对象 "Models"

c - 找到最大 n 使得 x^n<=y 的最快算法

arrays - 如何在 ruby​​ 数组中仅添加正数?

python - 我如何获得斯坦福 NLTK python 模块?