Редактирование данных в строке из таблицы, представленной django -tables2 - PullRequest
0 голосов
/ 25 апреля 2020

Это может быть что-то действительно простое, но я не могу понять это. Я создал таблицу, используя 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")
....

Но я только получаю "код что-то еще напечатано в командной строке

Пожалуйста, укажите мою ошибку и исправьте мой код там, где он неправильный, я буду признателен за это

...