пользовательская промежуточная таблица django выборка записей - PullRequest
1 голос
/ 21 января 2020

У меня есть две модели с отношением M2M. Настраиваемая таблица определяется как дополнительное поле

class DoctorHospital(models.Model):
clinic = models.ForeignKey(ClinicHospital, on_delete=models.CASCADE)
doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE)
shift = models.CharField(max_length = 10)

Проблема в том, что я пытаюсь выбрать все клиники на основании определенного c доктора. Данные поступают на основании указанного c доктора, но пользовательское поле смещение не приходит.

вот мое базовое представление класса

class DoctorDetailView(generic.DetailView):
model = Doctor
def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['clinic_hospital_list'] = self.object.clinic_hospital.all()
    return context

1 Ответ

0 голосов
/ 21 января 2020

Вы можете аннотировать clinic_hospital_list, чтобы получить соответствующее значение shift:

from django.db.models import <b>F</b>

class DoctorDetailView(generic.DetailView):
    model = Doctor
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['clinic_hospital_list'] = self.object.clinic_hospital.annotate(
            <b>shift=F('doctorhospital__shift')</b>
        )
        return context

Теперь ClinicHospital s, возникающие из этого набора запросов, будут иметь дополнительный атрибут .shift, который содержит значение поля shift в промежуточной таблице.

...