【问题标题】:Counting django fields when value is True and displaying this count当值为 True 时计算 django 字段并显示此计数
【发布时间】:2019-01-07 10:40:09
【问题描述】:

我在 Django 中有一个带有 ProjectsTasks 的模型。一个项目可以有很多任务,这是我的模型:

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()

【问题讨论】:

    标签: python django


    【解决方案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)

    【讨论】:

    • 谢谢,这让我重回正轨!
    【解决方案2】:

    您可以像这样在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()
    

    然后在管理站点的read_only fields 中添加该属性,如下所示:

    @admin.register(Project)
    class ProjectAdmin(admin.ModelAdmin):
        ...
        readonly_fields = ["num_completed"]
    

    【讨论】:

      猜你喜欢
      • 2020-08-04
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2023-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      相关资源
      最近更新 更多