我在Django中有一个Projects
和Tasks
的模型。一个项目可以有很多任务,这是我的模型:
class Project(models.Model):
project_name = models.CharField(max_length=200)
is_complete = models.BooleanField(default=False)
def __str__(self):
return self.project_name
class Task(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
task_name = models.CharField(max_length=100)
task_desc = models.TextField(max_length=600)
due_date = models.DateField('due date')
is_complete = models.BooleanField(default=False)
task_desc.short_description = "Task description"
def __str__(self):
return self.task_name
我想在项目旁边显示总任务数和已完成任务数。我已将以下内容添加到admin.py中,以显示每个项目的总任务数:
def project_task_count(self, obj):
return obj.task_set.count()
我还如何向管理员添加仅已完成任务的计数,并复制这种方法以在网站上显示这些计数,而不仅仅是在管理面板中显示?
我尝试将其添加到模型中,但不起作用:
def num_complete(self, obj):
return self.is_complete.count()
答案 0 :(得分:1)
您可以像这样在Project
中添加属性方法:
class Project(models.Model):
project_name = models.CharField(max_length=200)
is_complete = models.BooleanField(default=False)
def __str__(self):
return self.project_name
@property
def num_completed(self):
self.task_set.filter(is_complete=True).count()
并按如下所示将该属性添加到Adminsite的read_only fields中:
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
...
readonly_fields = ["num_completed"]
答案 1 :(得分:1)
def project_task_count(self, obj):
return obj.count()
如果obj是所有任务obj = Task.objects.all()
的查询集
def num_complete(self, obj):
return obj.count()
如果obj是所有已完成任务obj = Task.objects.filter(is_complete = True)
的查询集