【问题标题】:django form wizard - NoReverseMatch - looking for a specific named stepdjango 表单向导 - NoReverseMatch - 寻找特定的命名步骤
【发布时间】:2016-04-02 22:00:41
【问题描述】:

我正在尝试使用 Django 表单向导设置多步骤表单,但遇到了“NoReverseMatch”错误。

根据之前遇到此错误的经验,这是因为我在 url 取一个参数时没有传递参数,即(?P<pk>\d+)

在我的具体情况下: 找不到带有参数“()”和关键字参数“{'step':u'address'}”的“task_step”。尝试了 0 个模式:[]

到目前为止我已经尝试过:

  • <form action=""> 中传递wizard.steps.current
  • <form action=""> 中传递wizard.steps.next

这和我的 urls.py 有关吗?

//views.py

FORMS = [("subcategory", ChooseSubcategoryForm),
                    ("address", SetAddressForm),
                    ("task-details", AddTaskDetailsForm),]

TEMPLATES = {"subcategory": "tasks/create_task_form/step1.html",
                        "address": "tasks/create_task_form/step2.html",
                        "task-details": "tasks/create_task_form/step3.html",
}
class AddTaskWizard(NamedUrlSessionWizardView):

    form_list = [ChooseSubcategoryForm, SetAddressForm, AddTaskDetailsForm]

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def get_context_data(self, form, **kwargs):
        context = super(AddTaskWizard, self).get_context_data(form=form, **kwargs)
        # add extra variables for a specific step
        # if self.steps.current == "step_name":
        #   context.update({'another_variable': True})
        return context

    def done(self, form_list, form_dict, **kwargs):
        # do something with the form data(form_list)
        subcategory = form_dict['subcategory'].save()
        print("============")
        print(subcategory)
        print("============")
        address = form_dict['address'].save()
        task = form_dict['task-details'].save()

        return HttpResponseRedirect('/tasks')

    def get_step_url(self, step):
        return reverse(self.url_name, kwargs={'step':step})

// urls.py

from django.conf.urls import url 
from .views import CreateTaskView, TaskDetailView
from . import views
from .forms import ChooseSubcategoryForm, SetAddressForm, AddTaskDetailsForm


app_name='tasks'

named_task_forms = (
    ("subcategory", ChooseSubcategoryForm),
    ("address", SetAddressForm),
    ("task-details", AddTaskDetailsForm),
)

task_wizard = views.AddTaskWizard.as_view(named_task_forms, url_name="task_step")

urlpatterns = [

    url(r'^add_task/(?P<step>\w+)/$', task_wizard, name='task_step'),
]

// step1.html => 子类表单

<div class="row" id="create-task-progress">
    <div class="container">
        <div class="col-md-4 section-static border-top-gray text-center">
            <span class="glyphicon glyphicon-search glyphicon-md orange" ></span> <span class="orange">1. Choose Subcategory</span>
        </div>
        <div class="col-md-4 section-static col-middle text-center">
            <span class="glyphicon glyphicon-home glyphicon-md" ></span> <span>2. Set Address</span>
        </div>
        <div class="col-md-4 section-static border-top-gray text-center">
            <span class="glyphicon glyphicon-pencil glyphicon-md"></span> <span>3. Task Details</span>
        </div>
    </div>
</div>
<div class="row section-light-gray border-top-gray">
    <div class="container" id="task-form-container">
        <div class="col-md-12">
            <form action="{% url 'tasks:task_step' wizard.steps.current %}" method="POST" enctype="multipart/form-data" class="col-md-10 col-md-push-1">
                {% csrf_token %}
                {{ wizard.management_form }}
                <div class="col-md-12 task-field-container">
                    {{ wizard.form.subcategory.label }}
                    {{ wizard.form.subcategory }}
                </div>
                <input type="submit" value="Continue" id="add_task" class="btn btn-primary col-xs-12" />
            </form>
        </div>
    </div>
</div>

【问题讨论】:

    标签: python django django-forms django-formwizard


    【解决方案1】:

    根据我在您的模板中看到的内容,您使用的是 url 命名空间。 我相信你需要改变

    task_wizard = views.AddTaskWizard.as_view(named_task_forms, url_name="task_step")
    

    task_wizard = views.AddTaskWizard.as_view(named_task_forms, url_name="tasks:task_step")
    

    所以你只是错过了tasks:

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 1970-01-01
      • 2019-04-18
      • 2017-12-04
      • 2012-06-25
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多