если у меня есть две модели, модель A и модель B, и я хочу, чтобы среднее значение поля модели A было значением поля в модели B - PullRequest
0 голосов
/ 03 марта 2019

У меня есть две модели:

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и volume_delivered должен быть немного короче, чем 35000, например, 34294
  4. грузовые автомобили, загруженные AGO, имеют свой конкретный объем, который составляет 33000, а volume_delivered может быть, например, 32294
  5. .Поле loading_average в Model Loaded является средним значением поля volume_delivered с указанным продуктом, будь то AGO или PMS, так как они имеют разные значения volume_delivered, поделенные на 1000
  6. , и ожидаемое количество в Model Loaded задано, то есть я приму значение
  7. Загруженное_количество в Загруженной модели должно быть суммой всех объемов, доставленных в Порядке модели сусиление PMS и AGO имеют различное значение volume_delivered, поэтому оно должно делать только сумму volume_delivered в Порядке модели для PMS, если продукт является PMS, и то же самое с AGO
  8. Остаток_квантовость должен представлять собой разницу между ожидаемым_квантованием и загруженным_квантованием
  9. Загруженные_труки должны быть суммой грузовых автомобилей в модели Order, и снова должны быть грузовые автомобили с PMS и грузовые автомобили с AGO.загруженные грузовики, если в модели загружен продукт PMS. Должна быть сумма грузовиков, для которых в заказе модели только PMS продукта, минус total_trucks для продукта PMS
  10. Остаток_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'.

1 Ответ

0 голосов
/ 05 марта 2019

я решил это после трех дней исследования:

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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...