Как я могу сделать этот вложенный запрос Django?

Как я могу сделать этот запрос в django?

Модели:

class Card(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=255, null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    cover = models.CharField(max_length=255, null=True, blank=True)
    member = ArrayField(models.CharField(max_length=255, null=True, blank=True), null=True, blank=True)
    label = ArrayField(models.CharField(max_length=255, null=True, blank=True), null=True, blank=True)
    subscribed = models.BooleanField(default=False)
    due = models.DateTimeField(auto_now_add=False, null=True, blank=True)

class Checklist(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=255, null=True, blank=True)

class CardChecklist(models.Model):
    card = models.ForeignKey(Card, on_delete=models.CASCADE, null=True)
    checklist = models.ForeignKey(Checklist, on_delete=models.CASCADE, null=True)

class Checkitem(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=255, null=True, blank=True)
    checked = models.BooleanField(default=False)

class ChecklistCheckitem(models.Model):
    checklist = models.ForeignKey(Checklist, on_delete=models.CASCADE, null=True)
    checkitem = models.ForeignKey(Checkitem, on_delete=models.CASCADE, null=True)

Ожидаемый пример результата запроса (все контрольные списки указанной карточки с соответствующими контрольными пунктами):

[{'id':'1', 'name':'checklist1', 'user':'1', 'CheckItems': [{'id': '1', 'user':'1', 'name':'Checkitem 1', 'checked':True}, {'id': '2', 'user':'1', 'name':'Checkitem 2', 'checked':False}]}, {'id': '2', 'name':'checklist2', 'user':'1', 'CheckItems': [{'id': '3', 'user':'1', 'name':'Checkitem 3', 'checked':True}, {'id':'4', 'user':'1', 'name':'Checkitem 4', 'checked':False}]}]

Ближайшая попытка

cardChecklists = list(
    Checklist.objects
        .filter(cardchecklist__card=cardId)
        .values('id', 'name', 'user', CheckItem = F('checklistcheckitem'))
)


[{'id':'1', 'name':'checklist1', 'user':'1', 'CheckItems': 1}, {'id':'1', 'name':'checklist1', 'user':'1', 'CheckItems': 2}, {'id': '2', 'name':'checklist2', 'user':'1', 'CheckItems': 3}, {'id': '2', 'name':'checklist2', 'user':'1', 'CheckItems': 4}]
Вернуться на верх