这是我的模型.py:
class Person(models.Model):
surname = models.CharField(max_length=100, blank=True, null=True)
forename = models.CharField(max_length=100, blank=True, null=True)
def __str__(self):
return '{}, {}'.format(self.surname, self.forename)
class PersonRole(models.Model):
ROLE_CHOICES = [
("Principal investigator", "Principal investigator"),
[etc...]
]
title = models.CharField(choices=TITLE_CHOICES, max_length=9)
project = models.ForeignKey('Project', on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
person_role = models.CharField(choices=ROLE_CHOICES, max_length=30)
def __str__(self):
return '{}: {} as {}.'.format(self.project, self.person, self.person_role)
class Project(models.Model):
title = models.CharField(max_length=200)
person = models.ManyToManyField(Person, through=PersonRole)
def __str__(self):
return self.title
def get_PI(self, obj):
return [p.person for p in self.person.all()] #I'll then need to filter where person_role is 'Principal investigator', which should be the easy bit.
在我的管理后台,我想显示的人(主要调查员)在主表:
class ProjectAdmin(ImportExportModelAdmin):
list_filter = [PersonFilter, FunderFilter]
list_display = ("title", "get_PI")
ordering = ('title',)
我想要:在管理员的项目表中显示具有‘首席调查员’角色的人.
你可以看到我在我的models.py
中创建了我的get_PI()
,在我的list_display
中创建了引用.我得到Project.get_PI() missing 1 required positional argument: 'obj'
.我做错了什么?