我有一个部门结构,其中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