Django模型中基于选择相关的嵌套查询



我有两个模型,其中第二个模型依赖于第一个模型。结构如下。

class Crop(models.Model):
name = models.CharField(max_length=100, unique=True)
description = models.TextField(null=True, blank=True)

另一种是

class Plotting(models.Model):
crop = models.ForeignKey(
Crop, on_delete=models.CASCADE, limit_choices_to={"is_active": True}
)
sowing_date = models.DateField(null=True, blank=True)
harvesting_date = models.DateField(null=True, blank=True)
acre = models.DecimalField(
max_digits=10, decimal_places=2, default=0, help_text="Area in Acres"
)

我想获取以下格式的数据。

CROP NAME | JAN | FEB | MAR | APR | MAY
crop 1    | 20  | 10  | 35  | 45  | 35 
crop 2    | 20  | 10  | 35  | 45  | 35
crop 3    | 20  | 10  | 35  | 45  | 35
crop 4    | 20  | 10  | 35  | 45  | 35

CROP 1 JAN根据收获日期定义了1月份收获的英亩数。我还想用日期进行筛选,并排除其值为英亩数之和为0的作物。

也许查询集是这样的:

queryset = Crop.objects.values('name')
queryset = queryset.aggregate(harvesting_date_jan=Count('harvesting_date', filter=Q(harvesting_date__month=1)))
queryset = queryset.aggregate(harvesting_date_feb=Count('harvesting_date', filter=Q(harvesting_date__month=2)))
...

获取所需数据的一种方法

p = Plotting.objects.all() # could filter for date and exclude acre == 0 
p = p.values('crop__name', 'harvesting_date__month').annotate(sum_of_acres=Sum('acre')).order_by('crop__name', harvesting_date__month')

在模板中,您可以使用重组

相关内容

  • 没有找到相关文章

最新更新