【问题标题】:How to aggregate, that is to get querysets based on a property of a query如何聚合,即根据查询的某个属性获取查询集
【发布时间】:2023-04-10 23:30:01
【问题描述】:

我的模特:

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 对象关联的医生对象列表,该对象存储在 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 是一个列表,但我需要一个查询集,以传递给表单。

【问题讨论】:

  • perms = ClinicPermissions.objects.filter(clinicid = cl).values('doctorid') ?

标签: python django


【解决方案1】:

简单

Doctor.objects.filter(<b>clinicpermissions__clinicid_id=10</b>)

这里10的值是Clinic对象的PK

参考


附带说明,在 Django 中,我们不会使用 id 作为字段的后缀,因为 Django 在内部处理相同的字段。同样,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

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2019-12-04
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多