如何在我的任务列表中过滤掉创建日期的任务

How can I filter out date created task in my task list

我正在尝试在 HTML 中显示我列表中的 date-created 个任务。

Models.py:

class Task(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=1000, blank=True, null=True)
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)

这是我在 Django 中的 HTML:


<div class="task-items wrapper">
    {% for task in tasks %}
    <div class="task-wrapper">
        {% if task.complete %}
            <div class="task-title">
                <div class="task-complete-icon"></div>
                <i><s><a class="task" href="{% url 'update-task' task.id %}">{{task}}</a></s></i>
                <br></br>

            </div>
            <a class="delete-link"  href="{% url 'delete-task' task.id %}"><i class="fa-solid fa-delete-left"></i></a>
        {% else %}
            <div class="task-title">
                <div class="task-incomplete-icon"></div>
               <a href="{% url 'update-task' task.id %}">{{task}}</a>

            </div>
            <a class="delete-link"  href="{% url 'delete-task' task.id %}"><i class="fa-solid fa-delete-left"></i></a>
        {% endif %}
    </div>
    <div class="emptylist">       
        {% empty %}
        <h3 style="text-align: center; line-height: 3;">No task in list! Let's create your task</h3>
    </div>
    {% endfor %}
</div>

例如,对于我创建的每个任务,它必须显示标题和创建日期,完成或未完成都无关紧要。我只能显示标题,我该怎么做才能显示日期?

created = models.DateTimeField(auto_now_add=True)

请删除 auto_now_add=True,然后您将在模板中获得日期时间选择器。

 <div class="task-items wrapper">
    {% for task in tasks %}
    <div class="task-wrapper">
        {% if task.complete %}
            <div class="task-title">
                <div class="task-complete-icon"></div>
                <i><s><a class="task" href="{% url 'update-task' task.id %}">{{task.title}}-{{task.created}}</a></s></i>
                <br></br>
                    
            </div>
            <a class="delete-link"  href="{% url 'delete-task' task.id %}"><i class="fa-solid fa-delete-left"></i></a>
        {% else %}
            <div class="task-title">
                <div class="task-incomplete-icon"></div>
               <a href="{% url 'update-task' task.id %}">{{task.title}}-{{task.created}}</a>
               
            </div>
            <a class="delete-link"  href="{% url 'delete-task' task.id %}"><i class="fa-solid fa-delete-left"></i></a>
        {% endif %}
    </div>
    <div class="emptylist">       
        {% empty %}
        <h3 style="text-align: center; line-height: 3;">No task in list! Let's create your task</h3>
    </div>
    {% endfor %}
</div>

目前,您正在显示 Task 模型的字符串表示形式,我假设它已设置为显示您的任务标题。你需要

  1. 分别显示标题和日期
  2. 将您的 Task 表示更改为 return 格式为标题和时间的字符串

我更喜欢 (1),因为它给了你更多的控制权。如果您想使用 (2),则需要添加 __str____repr__ 方法。

我推荐的方法是在模板上使用 «created» 变量来显示日期。

例如,我有一个名为 «post_created_on» 的模型,

class Profile(models.Model):
  post_created_on = models.DateTimeField()

我想在我的模板上显示它。

<h5>This is a post.</h5>

那么我只是在您的模板上使用我的 «post_created_on» 变量来显示日期。

<h5>This is a post. Created on: {{ task.post_created_on }}</h5>

您可以直接使用DateField()django-doc。但是如果你已经定义了 DateTimeField 那么你可以使用 @property 装饰器并以 1-7-2022 格式显示 date,如图所示。

在您的 Task 模型中创建 @property,如下所示:

class Task(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=1000, blank=True, null=True)
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    
    @property
    def get_only_date(self):
        date_object = self.created
        year = date_object.year
        month = date_object.month
        day = date_object.day
        return f"{day}-{month}-{year}"

然后,在 template 文件中的任意位置使用 属性 循环:

{% for task in tasks %}
{{task.get_only_date}}
{% endfor %}
class Task(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=1000, blank=True, null=True)
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
{% for task in tasks %}
    {{task.created.date}}
{% endfor %}

您可以使用这种方式而无需编写任何其他属性。