Вот реализация для тех, кто может захотеть что-то более общее, которое будет работать с любым количеством полей.
Array.prototype.sortBy = function (propertyName, sortDirection) {
var sortArguments = arguments;
this.sort(function (objA, objB) {
var result = 0;
for (var argIndex = 0; argIndex < sortArguments.length && result === 0; argIndex += 2) {
var propertyName = sortArguments[argIndex];
result = (objA[propertyName] < objB[propertyName]) ? -1 : (objA[propertyName] > objB[propertyName]) ? 1 : 0;
//Reverse if sort order is false (DESC)
result *= !sortArguments[argIndex + 1] ? 1 : -1;
}
return result;
});
}
В принципе, вы можете указать любое количество свойств / направление сортировки:
var arr = [{
LastName: "Doe",
FirstName: "John",
Age: 28
}, {
LastName: "Doe",
FirstName: "Jane",
Age: 28
}, {
LastName: "Foo",
FirstName: "John",
Age: 30
}];
arr.sortBy("LastName", true, "FirstName", true, "Age", false);
//Will return Jane Doe / John Doe / John Foo
arr.sortBy("Age", false, "LastName", true, "FirstName", false);
//Will return John Foo / John Doe / Jane Doe
Ваш отступ неверен в нескольких местах. Вам нужно создать пустую форму, если запрос не POST; и вам нужно вернуться при любых обстоятельствах. Итак:
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, request.FILES, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'blog/post_edit.html', {'form':form})
Обратите внимание, как else
совпадает с первым if
, и отдача находится вне их обоих.
Ваш request.method
не POST
. Просто сделайте:
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
if form.is_valid():
....
else:
.....
# return a response in cases when request.method is not POST
return HttpResponse()