程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了NoReverseMatch at /products/update/6/ Reverse for 'product_update' with arguments '('',)' not found大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决NoReverseMatch at /products/update/6/ Reverse for 'PROduct_update' with arguments '('',)' not found?

开发过程中遇到NoReverseMatch at /products/update/6/ Reverse for 'PROduct_update' with arguments '('',)' not found的问题如何解决?下面主要结合日常开发的经验,给出你关于NoReverseMatch at /products/update/6/ Reverse for 'PROduct_update' with arguments '('',)' not found的解决方法建议,希望对你解决NoReverseMatch at /products/update/6/ Reverse for 'PROduct_update' with arguments '('',)' not found有所启发或帮助;

我想通过点击产品列表的带有产品ID的URL转到产品更新方法但是这个错误来了。我不明白我在这里做错了什么。给出以下代码。

产品列表:

{% for product in products %}
<tr>
    <td>
        <img wIDth="55px" height="55px" src="{{ product.photo.url }}" />
    </td>
    <td><input class="groupcheck" type="checkBox" value="{{product.ID}}" ID="{{product.ID}}"/></td>
    <td>
        <a class="btn product-update" href="{% url 'accpack:product_update' pk=product.ID %}">{{product.product_codE}}</a>
    </td>
    <td>{{product}}</td>
    <td>
        <a class="far fa-plus-square fa-1x Js-create-product_attribute" data-url="{% url 'accpack:products_attributes_create' pk=product.ID %}"
                 data-toggle="modal" data-target="#modal-product_attribute"></a> &nbsp
        <a class="far fa-edit fa-1x Js-create-product_attribute" data-url="{% url 'accpack:products_attributes_update' pk=product.ID %}"
                 data-toggle="modal" data-target="#modal-product_attribute"></a>
    </td>
    <td>{{product.cost_pricE}}</td>
    <td>{{product.SALE_pricE}}</td>
    <td>{{product.quantity_per_unit}}</td>
    <td>{{product.branD}}</td>
</tr>
{% endfor %}

网址:

# Product url
url('products/$',vIEws.product_index,name="products"),url('products/create/$',vIEws.product_create,name="product_create"),url('products/update/(?P<pk>\d+)/$',vIEws.product_update,name="product_update"),

查看:

def product_update(request,pk):
    product = get_object_or_404(Product,pk=pk)
    if request.method == 'POST':
        form = ProductForm(request.POST,instance=product)
    else:
        form = ProductForm(instance=product)
    return save_product_form(request,form,'products/partial_product_update.HTML')

编辑/更新帖子
我在这里添加了 save_product_form..

def save_product_form(request,template_Name):
        data = Dict()
        if request.method == 'POST':
            if form.is_valID():
                form.instance.created_by = request.user
                form.instance.updated_by = request.user
                form.save()
                data['form_is_valID'] = True
                products = Product.objects.all().prefetch_related('categorIEs').order_by('-ID')
                data['HTML_List'] = render_to_String(request=request,template_name='products/partial_product_List.HTML',context={ 'products': products })
                #messages.success(request,"New Product Created")
            else:
                #for msg in form.error_messages:
                #    messages.error(request,f"{msg}: {form.error_messages[msg]}")
    
                data['form_is_valID'] = false
        context = {'form': form}
        data['HTML_form'] = render_to_String(template_name,context,request=request)

partial_product_update.HTML:

<form ID="Form" method="post" action="{% url 'accpack:product_update' pk %}" class="col s12" enctype="multipart/form-data">
    {% csrf_token %}
    <br>
    {% crispy form form.Helper %}
    <br>
</form>

追溯:

TraceBACk (most recent call last):
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\core\handlers\exception.py",line 47,in inner
    response = get_response(request)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\core\handlers\base.py",line 179,in _get_response
    response = wrapped_callBACk(request,*callBACk_args,**callBACk_kwargs)
  file "D:\MEGA\djangoprojects\myprojects\accpack\vIEws\products.py",line 52,in product_update
    return save_product_form(request,'products/partial_product_update.HTML')
  file "D:\MEGA\djangoprojects\myprojects\accpack\vIEws\products.py",line 36,in save_product_form
    data['HTML_form'] = render_to_String(template_name,request=request)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\loader.py",line 62,in render_to_String
    return template.render(context,request)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\BACkends\django.py",line 61,in render
    return self.template.render(context)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\base.py",line 170,in render
    return self._render(context)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\base.py",line 162,in _render
    return self.nodeList.render(context)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\base.py",line 938,in render
    bit = node.render_Annotated(context)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\base.py",line 905,in render_Annotated
    return self.render(context)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\template\defaultTags.py",line 446,in render
    url = reverse(vIEw_name,args=args,kwargs=kwargs,current_app=current_app)
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\urls\base.py",line 87,in reverse
    return iri_to_uri(resolver._reverse_with_prefix(vIEw,prefix,*args,**kwargs))
  file "C:\Users\Dell\anaconda3\envs\webapp\lib\site-packages\django\urls\resolvers.py",line 685,in _reverse_with_prefix
    raise noreverseMatch(msg)
django.urls.exceptions.noreverseMatch: Reverse for 'product_update' with arguments '('',)' not found. 1 pattern(s) trIEd: ['products/update/(?P<pk>\\d+)/$']

解决方法

您没有将 pk 添加到您的上下文中,因此它是空的:

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

您的 context 必须在 pk 中包含 save_product_form

def save_product_form(request,form,template_Name):
    ...
    context = {
        'form': form
        'pk': form.instance.pk
    }
    data['html_form'] = render_to_String(template_name,request=request)
    ...

或更新您的 partial_product_update.html - 使用 form.instance.pk 代替 pk

{% load crispy_forms_tags %}
<form id="Form" method="post" action="{% url 'accpack:product_update' form.instance.pk %}" class="col s12" enctype="multipart/form-data">
    {% csrf_token %}
    <br>
    {% crispy form form.Helper %}
    <br>
</form>

大佬总结

以上是大佬教程为你收集整理的NoReverseMatch at /products/update/6/ Reverse for 'product_update' with arguments '('',)' not found全部内容,希望文章能够帮你解决NoReverseMatch at /products/update/6/ Reverse for 'product_update' with arguments '('',)' not found所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。