我的models.py
:
class Subject(models.Model):
name = models.CharField(max_length=200)
class Person(models.Model):
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, blank=True, null=True)
school = models.ForeignKey(School, on_delete=models.CASCADE, blank=True, null=True)
class PersonRole(models.Model):
project = models.ForeignKey('Project', on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
class Project(models.Model):
title = models.CharField(max_length=200)
person = models.ManyToManyField(Person, through=PersonRole)
现在,在我的管理后端,我想添加一个很好的过滤与list_filter
.这个过滤器应该可以通过学校过滤一个人是附属于一个项目.换句话说,如果John(属于学校"1号")被附加到项目3号,我希望后端的项目表只显示项目3号.
我想我应该定制一个simplelistfilter.首先,虽然,我有点卡住如何获得附属于项目的人员的学校名单.
目前为止,我的try 是:
class PersonRole(models.Model):
[...]
def get_school(self):
return self.person.school
class Project(models.Model):
@admin.display(description='PI School')
def get_PI_school(self):
return [p for p in self.person.get_school()]
admin.py
:
class ProjectAdmin(admin.ModelAdmin):
list_display = ("get_PI_school",) #This is just to see if the field is populated
有了这个,我得到'ManyRelatedManager' object has no attribute 'get_school'
.