Django CreateView抛出NoReverseMatch

时间:2015-12-22 11:21:30

标签: django

我是Django的新手。我正在构建一个简单的应用程序,我在使用基于类的视图创建对象时遇到了困难。我有一个模特:

Models.py:

class Vehicle(models.Model):
    make = ...
    model = ...

    def get_absolute_url(self):
        return reverse('vehicle-detail', kwargs={'pk' : self.PK})

然后在views.py中:

class VehicleCreate(CreateView):
    model = Vehicle
    fields = ['make','model']

myapp urls.py

url(r'vehicle/add/$', VehicleCreate.as_view(), name='vehicle-add'),

我上面写的所有内容仅与CreateView有关。根据CreateView cbv的需要,可以正确导入所有内容。当我访问mydomain.com/vehicle/add/时,有一个包含模型所有字段的表单,但是当我点击Create按钮时会抛出错误NoReverseMatch。 我正在用手机写信,这就是为什么我发布完整的.py文件内容有点困难。

1 个答案:

答案 0 :(得分:1)

您的模型有get_absolute_url方法。

class Vehicle(models.Model):

    def get_absolute_url(self):
        return reverse('vehicle-detail', kwargs={'pk' : self.PK})

要使其工作,需要有一个名为vehicle-detail的url模式,它接受主键作为关键字参数。

您可以使用DetailView创建视图。

class VehicleDetail(DetailView):
    model = Vehicle
    ...    

您必须创建一个合适的模板。

然后添加url模式,例如:

url(r'vehicle/(?P<pk>\d+)/$', VehicleDetail.as_view(), name='vehicle-detail'),