#python #django
#python #django
Вопрос:
Моя модель:
class ClinicPermissions(models.Model):
id = models.AutoField(primary_key=True, unique=True)
clinicid = models.ForeignKey(Clinic, on_delete=models.CASCADE)
doctorid = models.ForeignKey(doctor, on_delete=models.CASCADE)
viewperm_choices = (
(0, 'Cannot view clinic details'),
(1, 'Can view clinic details')
)
viewperms = models.IntegerField(
choices=viewperm_choices, default=0)
editperms_choices = (
(0, 'Cannot edit clinic details'),
(1, 'Can edit clinic details')
)
editperms = models.IntegerField(
choices=editperms_choices, default=0)
editdocs_choices = (
(0, 'Cannot edit doctor details'),
(1, 'Can edit doctor details')
)
editdocs = models.IntegerField(
choices=editdocs_choices, default=0)
class Meta:
unique_together = ["clinicid", "doctorid"]
Приведенная выше модель описывает разрешения каждого врача в клинике. Мне нужно получить список объектов doctor, связанных с объектом Clinic, который хранится в модели ClinicPermissions, в виде набора запросов и передать его в форму.
то есть
Я хочу получить конкретную клинику.
cl = Clinic.objects.get(id=10)
Затем я хочу получить набор запросов врачей из ClinicPermissions, где clinicid = cl:
то есть что-то более элегантное, чем следующее:
perms = ClinicPermissions.objects.filter(clinicid = cl)
docs = []
for perm in perms:
docs.append(perm.doctorid)
return docs
Здесь docs — это список, но мне нужен набор запросов для передачи в форму.
Комментарии:
1. perms = ClinicPermissions.objects.filter(clinicid = cl).values(‘doctorid’) ?
Ответ №1:
Просто
Doctor.objects.filter(clinicpermissions__clinicid_id=10)
Здесь значением 10
является PK Clinic
объекта
Ссылка
В качестве примечания, в Django мы не будем использовать id
в качестве суффикса к полям, поскольку Django внутренне обрабатывает то же самое. Аналогично, Django также обрабатывал основное поле, следовательно, нет необходимости определять PK явно.
class ClinicPermissions(models.Model):
id = models.AutoField(primary_key=True, unique=True)
clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
doctor = models.ForeignKey(Musician, on_delete=models.CASCADE)
# rest of the fields