Итак, я работал над этим учебным пособием по 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'),
]