Проблема при запросе глубоко вложенного связанного поля в сериализаторе django

У меня есть модели с глубокой вложенной связанной моделью, которая выглядит следующим образом:

class User(models.Model):
  username = models.Charfield(max_length=20)
  ...
class Workspace(models.Model):
  ...

class Folder(models.Model):
  workspace = models.ForeignKey(Workspace, on_delete=models.CASCADE)

class File(models.Model):
  folder = models.ForeignKey(Folder, on_delete=models.CASCADE)

class Member(models.Model):
  user = models.ForeignKey(User,  on_delete=models.CASCADE)
  workspace = models.ForeignKey(Workspace, related_name="members", on_delete=models.CASCADE)


class Post(models.Model):
  file = models.ForeignKey(File, on_delete=models.CASCADE)

Теперь мой вопрос в том, как я могу получить результат запроса Post, который выглядит следующим образом:

{
  "id": 1,
  "file" 2,
  "members" : [1,2,3]
}


Я пытался использовать SlugRelatedField в сериализаторе, но не могу добиться правильного результата.

Вы можете добавить метод свойства к вашей модели Post.
что-то вроде этого:

@property
def users(self):
    return self.file.folder.workspace.members

И добавьте поле 'users' в сериализатор Post как обычное поле.

Я придумал ответ, хотя не знаю, является ли это оптимальным решением, но я использую поле SerializerMethod.

authors = serializers.SerializerMethodField()

    def get_authors(self, obj):
        print(self)
        print(obj)
        workspace = obj.file.folder.workspace.id
        return Member.objects.filter(workspace=workspace).values(
            uid=F("user__id"), first_name=F("user__first_name"), last_name=F("user__last_name")
        )
Вернуться на верх