【发布时间】:2018-03-07 16:25:13
【问题描述】:
我有一个字典列表('DailyEnrollment' 对象的查询集),如下所示:
[
{'location_id': 1, 'student_count': 780},
{'location_id': 4, 'student_count': 535},
{'location_id': 6, 'student_count': 496}
]
有一个 Location 对象具有属性 name - 此列表中的 location_id 与 Location 对象相关,但它不是外键(在模型),因为在我们的项目中其他应用程序如何与之交互。
有没有一种简单的方法来遍历这个列表,为location_id 获取每个字典location.name 并将其作为location_name 附加到字典中?
我正在考虑在列表推导中使用字典推导 - 但我不确定那是多么 Pythonic。
型号:
class Location(models.Model):
name = models.CharField(max_length=50)
short_name = models.CharField(max_length=50)
DailyEnrollment 是从使用外部数据构建的视图中获取的数据
class DailyEnrollment(SchoolModel):
id = models.IntegerField(db_column='ID', primary_key=True)
location_id = models.IntegerField(db_column='schoolID')
grade = models.CharField(db_column='grade', max_length=10)
end_year = models.IntegerField(db_column='endYear')
run_date = models.DateField(db_column='runDate')
student_count = models.IntegerField(db_column='studentCount')
在视图中,这就是我获取每日注册的方式
# get past enrollments
past_daily_enrollments = DailyEnrollment.objects.filter(
run_date=datetime.strptime(since_date, '%m-%d-%Y'),
location_id__lte='31',
end_year='2018')
我创建了一个“新列表”数据,所有内容都按location_id 分组,总数为student_count
location_data = past_daily_enrollments.values('location_id').annotate(
student_count=Sum('student_count')
)
我就是这样解决我所问的问题的。我有“location_data”,这是我的字典列表。
【问题讨论】:
-
这是用 Django 写的吗?
-
这个问题不完整。提供(样本)所有必要的数据结构和所需的输出。
-
您应该能够使用您已经获得的 QuerySet 获取
Location.name。如果您想知道如何执行此操作,请告诉我。 -
@Tobias 那太好了!我只是不确定如何使用该 QuerySet 获取那些
Location名称 - 我总是可以附加这些结果。 -
@timgeb - 我更新了更多信息。
标签: python django list dictionary