我的模特:
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"]
以上模型描述了诊所中每个医生的权限。我需要获取与Clinic对象关联的Doctor对象列表,并将其作为查询集存储在ClinicPermissions模型中,并将其传递给表单。
即
我想去一个特定的诊所。
cl = Clinic.objects.get(id=10)
然后,我想从ClinicPermissions获取医生的查询集,其中临床编号= cl:
即比以下更优雅的东西:
perms = ClinicPermissions.objects.filter(clinicid = cl)
docs = []
for perm in perms:
docs.append(perm.doctorid)
return docs
在这里,docs是一个列表,但是我需要一个查询集才能传递给表单。
答案 0 :(得分:4)
简单
Doctor.objects.filter(clinicpermissions__clinicid_id=10)
此处的值 10
是 Clinic
对象的PK
作为一个补充说明,在Django中,由于Django内部对其进行处理,因此我们不会将id
作为字段的后缀。同样,Django也处理Primary field,因此无需显式定义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