我有两个模型,其中第二个模型依赖于第一个模型。结构如下。
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')
在模板中,您可以使用重组