Как получить или показать каждый объект от самого нового до самого последнего в Django

Я довольно новичок в python и django. Я смог создать простую CRUD логику с помощью шаблона, но у меня возникла небольшая проблема.

Когда я обновляю определенную задачу, а затем запрашиваю все объекты из модели, тот, который был обновлен, теперь запрашивается на последней позиции (views.py ниже):

def create_task(request):
tasks = Task.objects.all()
if request.method == 'POST':
    task_id_update = request.POST.get('task_id_update')
    task_id_delete = request.POST.get('task_id_delete')
    if task_id_update:
        task = Task.objects.filter(id=task_id_update).first()
        task.finished = True
        task.save()
    elif task_id_delete:
        task = Task.objects.filter(id=task_id_delete).first()
        task.delete()
    else:
        form = TaskForm(request.POST)
        if form.is_valid():
            task = form.save(commit=False)
            task.author = request.user
            task.save()
            return redirect('/create_task')
form = TaskForm()
return render(request, 'main/create_task.html', {'form': form, 'tasks': tasks})

И я хочу отобразить его на ОДНОЙ СТРАНИЦЕ как шаблон, и вот что я сделал в моем html:

<table class="table table-hover">
<thead>
  <tr>
    <th scope="col">Title</th>
  </tr>
</thead>
<tbody>
    {% for task in tasks %}
      {% if task.finished == False %}
        <tr>
          <td>{{task.title}}</td>
          <td>
            <form method="post">
              {% csrf_token %}
              <button type="submit" class="btn btn-warning" name= "task_id_update" value="{{task.id}}">Mark as finished</button>
            </form>
          </td>
          <td>
            <form method="post">
              {% csrf_token %}
              <button type="submit" class="btn btn-danger" name= "task_id_delete" value="{{task.id}}">Delete</button>
            </form>
          </td>
        </tr>
        {% else %}
        <tr class="table-success">
          <td>{{task.title}}</td>
          <td>
            <form method="post">
              {% csrf_token %}
              <button type="submit" class="btn btn-danger" name= "task_id_delete" value="{{task.id}}">Delete</button>
            </form>
          </td>
        </tr>
      {% endif %}
    {% empty %}
      No tasks!
    {% endfor %}
</tbody>

Есть ли лучший способ сделать это?

Большое спасибо!

Порядок задач во время итерации в цикле for, если он не задан явно через метод order_by QuerySet, будет определяться параметром ordering Model Meta. Если не задано ни то, ни другое, то вы получите упорядочение значений в хранилище базы данных. Большинство баз данных просто помещают последнюю обновленную запись куда-нибудь, где это удобно - например, в начало или конец таблицы.

Итак, у вас действительно есть несколько вариантов, но эти два выделяются:

  1. Добавьте ordering в класс Meta вашей Task модели
  2. .
  3. Добавьте order_by("FIELD_NAME_HERE", ) к вашему запросу, перед .all(), в строке #2
Вернуться на верх