Вывод из связанных моделей Django

Есть несколько связанных моделей:

class regSurname(models.Model):
    surname = models.CharField(max_length=500, verbose_name='Фамилия')


class regName(models.Model):
    name = models.CharField(max_length=500, verbose_name='Имя')
    surname_key = models.ForeignKey(regSurname, on_delete=models.CASCADE, related_name='regsurname', verbose_name='Имя')


class regPatronymic(models.Model):
    patronymic = models.CharField(max_length=500, verbose_name='Отчество')
    name_key = models.ForeignKey(regName, on_delete=models.CASCADE, related_name='patronymic', verbose_name='Отчество')

Вопрос, как получить в шаблоне связанные ФИО всех записей?


Ответы (1 шт):

Автор решения: Za Ars

Аннотации и функции F, Value, Concat из django.db.models вам в помощь

# views.py
qs = reSurname.objects.select_related('regsurname', 'regsurname__patronymic').annotate(full_name=Concat(F('surname'), Value(' '), F('regsurname__name'), Value(' '), F('regsurname__patronymic__patronymic')))

context = {'objects': qs}

# tempalate.html
{% for x in objects %}
    {{ x.full_name }}
{% endfor %}

Для случаев, когда нет одной из связей, используйте Case и When из того же django.db.models

→ Ссылка