Получить все значения поля 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, но я не смог заставить его работать.