Вывести данные из разных таблиц django
Подскажите, пожалуйста, как правильно вывести данные из разных таблиц, имеющих связь друг с другом, в persons_list. Необходимо заменить id значениями LoanTypeParticipation и Name. Сейчас получаю следующий результат:
0: {Id_Incidents: 120, Id_Group: 13, Type_Participation: "p", Id_People: 2, Competencies: "есть"}
Views.py
def load_table(request):
error = ''
id_incidents = request.session.get('Id_Incidents', 'ничего не передано')
if request.method == "GET":
if request.user:
try:
persons = AkpGroup.objects.filter(Id_Incidents=120) # запрос в базу данных
except AkpGroup.objects.DoesNotExist:
persons = None
pers = persons.all().values('Id_Incidents', 'Id_Group', 'Type_Participation', 'Id_People', 'Competencies')
persons_list = list(pers)
return JsonResponse(persons_list, safe=False)
Models.py
class AkpPeople(models.Model):
Id_People = models.AutoField(primary_key=True, verbose_name='Идентификатор участника группы АКП')
Name = models.CharField(max_length=256, verbose_name='Ф.И.О.')
Post = models.CharField(max_length=256, verbose_name='Должность:')
objects = models.Manager()
def __str__(self):
# return self.Name
return '%s (%s)' % (self.Name, self.Post)
class Meta:
db_table = 'akp_people'
verbose_name = 'Участник группы АКП'
verbose_name_plural = 'Участники групп АКП'
class AkpGroup(models.Model):
Id_Group = models.AutoField(primary_key=True, verbose_name='Идентификатор участника группы АКП')
Id_Incidents = models.ForeignKey('AkpIncidents', models.DO_NOTHING, verbose_name='Идентификатор инцидента')
Id_People = models.ForeignKey('AkpPeople', models.DO_NOTHING, verbose_name='Ф.И.О. участника')
Competencies = models.CharField(max_length=256, verbose_name='Компетенции')
LoanTypeParticipation = (
('d', 'Руководитель группы'),
('p', 'Член группы')
)
Type_Participation = models.CharField(max_length=1, choices=LoanTypeParticipation,
verbose_name='Тип участия')
Как вариант можете добавить в модели функцию для получения той информации, которая нужна по запросу. Пример
class AkpGroup(models.Model):
...
# функция для получения полей
def needs_data(self, pk):
people = AkpPeople.objects.get(pk=pk)
name = people.Name
return{"LoanTypeParticipation":self.LoanTypeParticipation, "name":name}
Как пример реализовал возвращение только двух полей. Во views.py можете вызвать
def load_table(request):
.....
data = {}
for person in persons:
data{person.Id_People} = person.needs_data(person.Id_People])
return JsonResponse(data, safe=False)
Вообще, я сторонник выносить всю логику для базы данных в функции классов для models.py. Даже для самых простейших манипуляций