Это может быть что-то действительно простое, но я не могу понять это. Я создал таблицу, используя django -tables2 и добавил в нее столбец флажок , над таблицей я создал действия выпадающий для удалить и edit внутри формы, вот мой html код
<div class="container">
<div class = "mt-5">
<h1 class="display-4">My Table</h1>
<form action="/delete_or_edit_item/" method="POST">
{% csrf_token %}
<select name="action_options">
<option value="delete">Delete</option>
<option value="edit">Edit</option>
</select>
<input type="submit" class="btn btn-info px-3 py-1 ml-2 mb-1" value="Go">
{% render_table mytable %}
</form>
</div>
</div>
Я создал для него одно представление на основе функций, вот код в views.py , я знаю, что моя проблема здесь где-то в моем действии == 'edit' ...
def delete_or_edit(request):
if request.method == "POST":
pks = request.POST.getlist("selection") # handle selection from table
action = request.POST.get('action_options')
selected_objects = my_tbl.objects.filter(object_id__in=pks)
if action == 'delete':
selected_objects.delete()
return HttpResponseRedirect("/")
selected_object = my_tbl.objects.get(object_id__in=pks)
if action == 'edit':
form = my_tbl_form(request.POST or None, instance=selected_object)
if form.is_valid():
form.save()
return HttpResponseRedirect("/")
return render(request, 'staffplanner/index.html', {'form':form})
, когда я выбираю действие "Удалить" и нажимаю "Go", все работает нормально, элемент удаляется из таблицы и перенаправляется на домашнюю страницу, но когда я выбираю «Изменить» и нажимаю «Go», я получаю
File "C:\Users\noori\Envs\planner\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\Users\noori\Envs\planner\lib\site-packages\django_tables2\templatetags\django_tables2.py", line 145, in render
raise ValueError("Expected table or queryset, not {}".format(klass))
ValueError: Expected table or queryset, not str
[25/Apr/2020 13:21:19] "POST /delete_or_edit_item/ HTTP/1.1" 500 144111
, все, что мне нужно, - это детали объекта, которые появляются в моем добавьте элемент формы (в области ввода), который находится прямо над формой удалить или изменить элемент , чтобы я мог редактировать свои данные и сохранять их. формы были созданы с использованием django -crispy-forms
Я изменил код и сделал что-то подобное в моих views.py:
....
if action == 'edit':
try:
selected_object = my_tbl.objects.get(object_id__in=pks)
form = my_tbl_form(request.POST or None, instance=selected_object)
if form.is_valid():
form.save()
return HttpResponseRedirect("/")
except:
print("didn't work")
finally:
print("code something else")
....
Но я только получаю "код что-то еще напечатано в командной строке
Пожалуйста, укажите мою ошибку и исправьте мой код там, где он неправильный, я буду признателен за это