簡體   English   中英

多對多關系為 JSON

[英]Many-to-many relationship as JSON

假設我有一個 model 由具有在一周中的某些日子工作的員工的設施組成。

#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,因為周歷應由 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 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM