Django FK 使用自定义管理器



我有一个部门结构,其中reports属于Departments的子集。在这种情况下,Department可以是county,而报告具有 FK 到county

class Report(models.Model):
    user = models.ForeignKey(User)
    value = models.IntegerField()
    county = models.ForeignKey('Department')

class CountyDepartmentManager(models.Manager):
    def get_queryset(self):
        return super(CountyDepartmentManager, self).get_queryset().filter(county=True)

class Department(models.Model):
    name = models.CharField(max_length=256)
    county = models.BooleanField(default=0)
    objects = models.Manager()
    county_objects = CountyDepartmentManager()

我想Report.county使用CountyDepartmentManager()这样只有县出现在报告县选择字段中。

甚至可能吗,或者我必须在Form类中做出这些定义?

嗯,我怀疑这是不可能的。此外,我想原因是使用受限管理器创建新实例需要一些丑陋的管道。

无论如何,我通过创建一个umnanaged County模型来解决它。

class County(models.Model):
    name = models.CharField(max_length=256)
    is_county = models.BooleanField(default=0)
    objects = CountyDepartmentManager()
    class Meta:
        managed = False
        db_table = 'department'

我原本打算扩展Department,但这最终导致County.objects.all()查询错误。它在寻找department.department_ptr_id

如果有人对此有更多信息,我很想听听。


编辑:我能够通过使县成为扩展部门的代理模型来做到这一点。

class County(Department):
    objects = CountyDepartmentManager()
    class Meta:
        proxy = True

最新更新