Django 1.8 UpdateView 生成 405 错误和空白模板
Django 1.8 UpdateView generates 405 error and blank template
我是 Python 和 Django 的新手,所以请多多包涵!我正在使用 Django 1.8 和 Python 3.
进行编码
我有以下看法:
class UpdatePart(UpdateView):
template_name = 'maketen/update_part.html'
model = Part
form_class = EditPartForm
这是我的 urls.py:
urlpatterns = [
url(r'^$', IndexView.as_view(), name='index'),
url(r'ten/add/$', TenCreate.as_view(), name='ten_create'),
url(r'update/(?P<pk>[0-9]+)/$', TenUpdate.as_view(), name='tender_update'),
url(r'delete/(?P<pk>[0-9]+)/$', TenDelete.as_view(), name='tender_delete'),
url(r'(?P<pk>[0-9]+)/$', TenDetail.as_view(), name='ten_detail'),
url(r'add_part/$', AddPart.as_view(), name='part_create'),
url(r'update_part/(?P<pk>[0-9]+)/$', UpdatePart.as_view(), name='part_update'),]
这是我的相关 forms.py class:
class EditPartForm(forms.ModelForm):
class Meta:
model = Part
fields = ['part_name', 'part_description', 'ten']
这是我的模板:
<h1>Update a New Part</h1>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update Part">
</form>
编辑:这是两个相关 classes 的 models.py:
class Ten(models.Model):
def __str__(self):
return self.ten_name
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.create_date <= now
def get_absolute_url(self):
return reverse('maketen:ten_detail', kwargs={'pk': self.pk})
was_published_recently.admin_order_field = 'create_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
ten_name = models.CharField(max_length=200)
create_date = models.DateTimeField('date created')
class Part(models.Model):
def __str__(self):
return self.part_name
def get_absolute_url(self):
return reverse('maketen:ten_detail', kwargs={'pk': self.ten.pk})
ten = models.ForeignKey(Ten)
part_name = models.CharField(max_length=200)
part_description = models.CharField(max_length=2000)
create_date = models.DateTimeField('date created')
我有一个类似的 class,它使用 UpdateView (TenUpdate),它工作得很好,但是,UpdatePart 会生成 405 错误。
我知道 405 是 post 错误,但我不明白为什么。我查看了我能找到的所有相关问题以及文档,但它们主要与基于函数的视图有关。另外,阅读你还不理解的东西也没有多大帮助:)
我的直觉是它与网址有关,但我不能肯定地说。
有什么想法吗?
您需要将 POST 发送到同一个 pk:
在您的模板中:
<h1>Update a New Part</h1>
<form action="{% url 'part_update' pk=object.pk %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update Part">
</form>
我也遇到了同样的情况,这解决了。
我是 Python 和 Django 的新手,所以请多多包涵!我正在使用 Django 1.8 和 Python 3.
进行编码我有以下看法:
class UpdatePart(UpdateView):
template_name = 'maketen/update_part.html'
model = Part
form_class = EditPartForm
这是我的 urls.py:
urlpatterns = [
url(r'^$', IndexView.as_view(), name='index'),
url(r'ten/add/$', TenCreate.as_view(), name='ten_create'),
url(r'update/(?P<pk>[0-9]+)/$', TenUpdate.as_view(), name='tender_update'),
url(r'delete/(?P<pk>[0-9]+)/$', TenDelete.as_view(), name='tender_delete'),
url(r'(?P<pk>[0-9]+)/$', TenDetail.as_view(), name='ten_detail'),
url(r'add_part/$', AddPart.as_view(), name='part_create'),
url(r'update_part/(?P<pk>[0-9]+)/$', UpdatePart.as_view(), name='part_update'),]
这是我的相关 forms.py class:
class EditPartForm(forms.ModelForm):
class Meta:
model = Part
fields = ['part_name', 'part_description', 'ten']
这是我的模板:
<h1>Update a New Part</h1>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update Part">
</form>
编辑:这是两个相关 classes 的 models.py:
class Ten(models.Model):
def __str__(self):
return self.ten_name
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.create_date <= now
def get_absolute_url(self):
return reverse('maketen:ten_detail', kwargs={'pk': self.pk})
was_published_recently.admin_order_field = 'create_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
ten_name = models.CharField(max_length=200)
create_date = models.DateTimeField('date created')
class Part(models.Model):
def __str__(self):
return self.part_name
def get_absolute_url(self):
return reverse('maketen:ten_detail', kwargs={'pk': self.ten.pk})
ten = models.ForeignKey(Ten)
part_name = models.CharField(max_length=200)
part_description = models.CharField(max_length=2000)
create_date = models.DateTimeField('date created')
我有一个类似的 class,它使用 UpdateView (TenUpdate),它工作得很好,但是,UpdatePart 会生成 405 错误。
我知道 405 是 post 错误,但我不明白为什么。我查看了我能找到的所有相关问题以及文档,但它们主要与基于函数的视图有关。另外,阅读你还不理解的东西也没有多大帮助:)
我的直觉是它与网址有关,但我不能肯定地说。
有什么想法吗?
您需要将 POST 发送到同一个 pk: 在您的模板中:
<h1>Update a New Part</h1>
<form action="{% url 'part_update' pk=object.pk %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update Part">
</form>
我也遇到了同样的情况,这解决了。