Как получить или показать каждый объект от самого нового до самого последнего в 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. Если не задано ни то, ни другое, то вы получите упорядочение значений в хранилище базы данных. Большинство баз данных просто помещают последнюю обновленную запись куда-нибудь, где это удобно - например, в начало или конец таблицы.
Итак, у вас действительно есть несколько вариантов, но эти два выделяются:
- Добавьте
ordering
в класс Meta вашейTask
модели .
- Добавьте
order_by("FIELD_NAME_HERE", )
к вашему запросу, перед.all()
, в строке #2