Соотношение «многие ко многим» с пользовательской таблицей в Django - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть две модели со многими отношениями с пользовательской таблицей, такой как Clini c и Doctor и пользовательская таблица DoctorClini c. Как я могу получить список врачей на основе клиник? это мой views.py

class ClinicDetailView(generic.DetailView):
    model = Clinic
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['doctor_list'] = self.doctor_set.annotate(
        shift=F('doctor_list__shift'),
        timming=F('doctor_list__timming')
        return context

Я получил ошибку объект не имеет атрибут doctor_set вот мой models.py

class Clinic(models.Model):
    name  = models.CharField(max_length = 256)
    area = models.ForeignKey(Area, on_delete=models.CASCADE,default=None,null=True)
    city = models.ForeignKey(City, on_delete=models.CASCADE,default=None,null=True)
    address = models.TextField()
    contact = models.CharField(max_length = 18)
    category = models.CharField(max_length=30,choices = CHTYPE)
    lat = models.FloatField()
    lon = models.FloatField()

class Doctor(models.Model):
    name =  models.CharField(max_length = 256)
    speciality = models.CharField(max_length = 256)
    contact = models.CharField(max_length = 12)
    speciality = models.ForeignKey(Speciality, on_delete=models.CASCADE)
    clinic_hospital = models.ManyToManyField(Clinic, through='DoctorHospital')

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)
    # time_from = models.DateTimeField(auto_now_add=False,blank=True)
    # time_to = models.DateTimeField( auto_now_add=False,blank=True)
    timing = models.CharField(max_length=20,blank=True)

и вот мои URL .py

path('clinichospital/<int:pk>/',views.ClinicHospitalDetailView.as_view(),name = 'clinichospital_detail')

Пожалуйста, помогите мне, как я могу показать список врачей.

1 Ответ

0 голосов
/ 24 февраля 2020

Попробуйте это:

class ClinicDetailView(generic.DetailView):
model = Clinic
def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    client_id = self.kwargs['pk'] # Pull id out of url
    client = Client.objects.get(id=client_id)
    context['doctor_list'] = client.doctor_set.annotate(
        shift=F('doctor_list__shift'),
        timming=F('doctor_list__timming') 
    ) # Missing bracket
    return context
...