Как отфильтровать задачи с датой создания в списке задач

Я пытаюсь показать дату создания задач в моем списке в HTML.

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)

А это мой HTML в Django

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

Например, для каждой задачи, которую я создаю, должно быть показано название с датой создания, и не имеет значения, завершена она или нет. Я могу показать только название, а как мне сделать, чтобы показывалась дата? enter image description here

created = models.DateTimeField(auto_now_add=True)

пожалуйста, удалите auto_now_add=True, тогда вы получите DateTime picker в вашем шаблоне.

 <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, чтобы вернуть строку, отформатированную с заголовком и временем

Я бы предпочел (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 и показать date в формате 1-7-2022, как показано на рисунке.

Создайте @property в вашей модели Task следующим образом:

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 %}

Вы можете использовать этот способ без кодирования каких-либо других свойств.

Вернуться на верх