我有两个模型:

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)


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


模型加载中的产品只有两种:PMS和AGO
模型订单中的产品也是PMS和Ago
在模型订单中装有PMS的卡车的特定体积为35000,交付的volume_volume应该比35000短一些,例如34294
装有AGO的卡车的特定体积为33000,交付的体积可以是例如32294
我希望模型加载中的field loading_average为使用指定产品交付的field volume_deliver的平均值,无论是AGO还是PMS,因为它们具有不同的volume_delivered值除以1000
给出了Model Loaded中的Expect_quantity的含义,我将决定该值
模型已加载中的loaded_quantity应该是模型订单中已交付的所有volume_delivered的总和,而且PMS和AGO再次交付了不同的volume_delivered,因此,如果产品是PMS,并且产品与PGO相同,则它应该仅对模型中的PMS执行volume_delivered的总和
剩余数量应为Expected_quantity和loaded_quantity之差
total_trucks应该是Expect_quantity和loading_average的除法
loaded_trucks应该是Order模型中卡车的总和,并且同样应该有带有PMS的卡车和带有AGO的卡车。因此,如果产品是模型中的PMS,则已装载的卡车应为仅具有模型订单中产品PMS的卡车的总和减去产品PMS的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/

10-09 06:08
查看更多