Получить все значения поля many to many + остальные поля модели в общем запросе к db

Я изучаю django и хочу сделать конечную точку API, которая выводит всех сотрудников в базе данных со всеми полями, включая поле languages, которое имеет отношение manyToMany к Languages Model.

class Employee(models.Model):
    name = models.CharField(max_length=50)
    lastname = models.CharField(max_length=50)
    salary = models.PositiveBigIntegerField()
    position = models.ForeignKey(Position, on_delete=models.CASCADE, related_name='employees')
    languages = models.ManyToManyField(Languages, related_name='employees')

    def __str__(self):
        return f'{self.name} {self.lastname}'

class Languages(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

Мне удалось это сделать, но с запросом, который получает только одного сотрудника

            try:
                emp = Employee.objects.get(id=id)
                data = {
                    'name': emp.name,
                    'lastname': emp.lastname,
                    'salary': emp.salary,
                    'position': emp.position.name,
                    'languages': [x['name'] for x in emp.languages.all().values()]
                }
            except ObjectDoesNotExist:
                return JsonResponse({"message": "No company found"})
            except Exception as ex:
                return JsonResponse({"message": "Something went wrong."})
            return JsonResponse({"message": "success", "data": data})

Но теперь я не могу сделать то же самое с запросом типа Employee.objects.all() или Employee.objects.values().

Вот что мне нужно, но со всеми сотрудниками сразу:

{
    "message": "success",
    "data": {
        "name": "Fred",
        "lastname": "Wilson",
        "salary": 28000,
        "position": "CTO",
        "languages": [
            "JavaScript",
            "PHP"
        ]
    }
}

Я пробовал много вещей, включая prefetch, но я не смог заставить его работать.

Вернуться на верх