作为JSON的多对多关系



假设我有一个模型,该模型由一些设施组成,这些设施的雇员在一周的某些日子工作。

#models.py
class Weekday(models.Model):
name = models.CharField()   # 'Monday', 'Tuesday', etc.
class Facility(models.Model):
name = models.CharField()
class Employee(models.Model):
name = models.CharField()
facility = models.ForeignKey(Facility)
# e.g. works on Mondays and Tuesdays
weekdays = models.ManyToManyField(Weekday)

现在我希望我的TemplateView生成一个JSON,该JSON按星期列出给定工厂的员工。这需要是JSON格式,因为周日历将由javascript呈现。

# views.py
class CareFacility(DetailView):
model = Facility
def get_context_data(self):
return {
'week_plan_json': ?
}

JSON可以是这样的:

[
{
'model': 'Weekday',
'name': 'Monday',
'employees': [
{
'model': 'Employee',
'name': 'John'
},
{
'model': 'Employee',
'name': 'Ida'
}
]
},
{
'model': 'Weekday',
'name': 'Tuesday',
'employees': [
{
'model': 'Employee',
'name': 'John'
}
]
},
{
# Wednesday
# etc...
}
]

确切的格式可能不同,但我想知道如何以一种由Weekday分组的方式组合这三个模型

使用Django提供的相关对象引用。下面的代码片段应该向您展示这个想法,并为您指出正确的方向,以便您可以根据自己的需求进行调整:

from collections import defaultdict
d = defaultdict(list)
f = Facility()  # Assuming this is the facility you're looking at
for employee in f.employee_set.all():
for weekday in employee.weekdays.all():
d[weekday.name].append(employee.name)
return dict(d)

这应该给你类似的东西:

{
'Monday': ['John', 'Ida'],
'Tuesday': ['John'],
...
}

有关关系的更多信息,请参阅Django文档

相关内容

  • 没有找到相关文章

最新更新