Django "ajax-CRUD-Tutorial", "NoReverseMatch" при обновлении клиента - PullRequest
0 голосов
/ 28 августа 2018

Итак, я работал над этим учебным пособием по ajax CRUD из Простое лучше, чем сложное: как реализовать CRUD с использованием Ajax и Json

Несмотря на то, что я могу заставить часть «создать» CRUD работать с ajax, я застреваю в «части обновления».

Чтобы обновить данные для клиента, мне нужно получить «customer.id» и передать его по URL.

В описанном выше руководстве мы используем действие формы с аргументом для book.id или, в моем случае, customer.id.

Когда я использую прямой идентификатор клиента, например # 72, представление работает нормально, но когда я пытаюсь использовать form.instance.pk, я получаю ошибку NoReverseMatch.

Reverse for 'customer_update_modal' with arguments '('',)' not found. 1 pattern(s) tried: ['customer/(?P<pk>\\d+)/update/$']

Как мне указать customer.id в аргументе, чтобы получить желаемый результат?

partial_customer_update.html

<form class="form-on-card--modal modal-trigger js-customer-update-form" action="{% url 'customer_update_modal' form.instance.pk %}" method="POST" novalidate>

views.py

def save_customer_form(request, form, template_name):
data = dict()
if request.method == 'POST':
    if form.is_valid():
        form.save()
        data['form_is_valid'] = True
        customers = Customer.objects.all()[:10]
        data['html_show_all_customers'] = render_to_string('includes/partial_customer_list.html',
            {'customer_list': customers}
        )
    else:
        data['form_is_valid'] = False

context = {'form': form}
data['html_form'] = render_to_string(template_name, context, request=request)
return JsonResponse(data)


def customer_create(request):# Function based view to create a new customer
if request.method == 'POST':
    form = CustomerForm(request.POST)
else:
    form = CustomerForm()
return save_customer_form(request, form, 'includes/partial_customer_create.html')


def customer_update(request, pk):
customer = get_object_or_404(Customer, pk=pk)
if request.method == 'POST':
    form = CustomerForm(request.POST, instance=customer)
else:
    form = CustomerForm(instance=customer)
return save_customer_form(request, form, 'includes/partial_customer_update.html')

urls.py

urlpatterns += [  # Links to create, update and delete customers
url(r'^customer/create/$', login_required(views.customer_create), name='customer_create_modal'), # Function based view, mind the "as_view()"
url(r'^customer/(?P<pk>\d+)/update/$', login_required(views.customer_update), name='customer_update_modal'),

]

1 Ответ

0 голосов
/ 29 августа 2018

Хорошо, я нашел маленького ублюдка.

Несмотря на то, что я хотел показать «part_customer_update.html», этот шаблон никогда не загружался. У меня в шаблоне был твердый код

Это означает, что всякий раз, когда я пытался обновить форму, он все равно вызывал шаблон «part_Customer_create.html ».

...