我正在尝试使用基本表单向我的应用添加数据,但我已经设置了一个将所有内容分离为“项目”的结构。从django基于类的表单中获取url(或kwargs)的id
一切都按照您选择的项目过滤,并且项目对用户具有manytomanykey。
我的网址然后设置为:
** //后端/项目
** //后端/项目[PROJID] /能力
后来,当我加入“功能“元素,我需要阅读了”从URL项目的ID或kwargs
我怎么访问capability_project(渲染表单模板时)
即ŧ他提交按钮将用户重定向回到正确的项目页面
<form id="capability-form" method="post" action="backend/projects/{{ project_capability }} /capabilities">
我想是因为它是一个多对多的,它返回一个迭代器错误。我应该怎么做?以及如何在添加项目时确保project_id值始终正确? //编辑为更新NoReverseMatch
错误即时获取从aparently无法访问形式的kwargs。
NoReverseMatch at /backend/projects/1/capabilities/add/
Reverse for 'capability-list' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: POST
Request URL: http://c9589d:8000/backend/projects/1/capabilities/add/
,并进一步跟踪信息
Request information
GET No GET data
POST Variable Value
status u'12'
domain u'2'
capability_num u'1'
level u'a'
description u'asasd'
submit u'Create Capability'
project u'1'
csrfmiddlewaretoken u'RW2vMwu3BhCOOhDTRaSeCglDSBCctqeF'
name u'asdsd'
models.py
class Project(models.Model):
proj_name = models.CharField()
assigned_to = models.ManyToManyField(User, related_name='assigned_to')
class Capability(models.Model):
name = models.CharField()
project = models.ManyToManyField(Project)
current_status = models.BooleanField()
future_status = models.NullBooleanField()
class Function(models.Model):
name = models.CharField()
capability = models.ForeignKey(Capability)
current_status = models.BooleanField()
future_status = models.NullBooleanField()
views.py
class Add_Capability(CreateView):
template_name = 'backend/add_capability.html'
model = Capability
fields = ['name', 'description', 'status', 'capability_num', 'project', 'domain']
form_class = CapabilityForm
forms.py
class CapabilityForm(forms.ModelForm):
name = forms.CharField(max_length=255, help_text="Please enter a name for the capability")
description = forms.CharField(max_length=255, help_text="Please enter a description for the capability")
status = models.CharField(max_length=255, choices=STATUS_CHOICES, default="Approved")
capability_num = forms.DecimalField(max_digits=5, decimal_places=4, help_text="Enter a number")
project = models.ManyToManyField(Project, null=True)
level = models.CharField(max_length=1, choices=LEVELS_CHOICES, default="Approved")
domain = models.ManyToManyField(Domain)
class Meta:
model = Capability
fields = ('name', 'description',)
urls.py
# /backend/1/capabilities
url(r'^projects/(?P<capability_project>\d+)/capabilities/$', views.CapabilityList.as_view(), name='capability-list'),
# /backend/capabilities/add - Add capabilities
url(r'^projects/(?P<capability_project>\d+)/capabilities/add/$', views.Add_Capability.as_view(), name='add-capability'),
# /backend/projects
url(r'^projects/$', views.ProjectList.as_view(), name='projects'),
我不知道你为什么要指定表单的动作什么。它需要回发到相同的AddView,否则它将不会被处理。 – 2014-12-03 14:06:45
粘贴你得到的错误回溯 – Anentropic 2014-12-03 14:09:50
'Add_Capability'视图在其定义中有'form_class = CapabilityForm'吗? – Anentropic 2014-12-03 14:10:57