python - Django 1.8 UpdateView 生成 405 错误和空白模板

标签 python django django-class-based-views http-status-code-405

我是 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 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>

编辑:这是两个相关类的 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')

我有一个使用 UpdateView (TenUpdate) 的类似类,它工作得很好,但是,UpdatePart 会生成 405 错误。

我知道 405 是一个后期错误,但我不明白为什么。我查看了我能找到的所有相关问题以及文档,但它们主要与基于函数的 View 有关。另外,阅读你还不理解的东西也没有多大帮助:)

我的直觉是它与网址有关,但我不能肯定地说。

有什么想法吗?

最佳答案

您需要将 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 1.8 UpdateView 生成 405 错误和空白模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31158071/

相关文章:

python - 验证 get 请求中的表单,如何?

python - Web应用程序用户名安全

python - 在集合字典中切换键和值

python - UUIDField 可以用作 Django 3.2.^ 中的 default_auto_field 吗?

python - 使用 URL 将模型设置为 true 或 false

Django:从单个 URL 返回多个 View 而不重定向

python - 无法将 Pandas 导入 IPython

python - 如何连接列表中的项目?

django - 将额外数据附加到 Django 中的 request.POST

Django - 如何在自定义过滤器中将 "or"条件添加到 queryset.filter