提交基于类的视图时,在后台会发生什么?

时间:2019-01-08 12:07:20

标签: django

我正在使用基于类的通用视图,特别是UpdateView。我还有其他目前可以按预期执行CRUD的对象。

现在,我创建了一个新对象,该对象也使用基于通用类的视图。现在的问题是,当我提交更新表单时,我无法完全跟踪按更新表单上的提交按钮时发生的情况。

它指向该网址 http://localhost:8000/order/question_update/

但是我没有没有参数的question_update url。我有一个在最后带有参数的question_update URL。

来自我的urls.py

path('question_update/<int:pk>', views.QuestionUpdate.as_view(), name='question_update'),

成功URL也不指向上面的question_update URL。

当我按下“提交”按钮时,我怎么知道泛型类UpdateView会做什么?我只想跟踪它从何处获得了我未声明的URL。

我对自己的代码进行了文本搜索,并且根本没有声明此网址。

这是其他网址

path('question_list/<int:file_id>/', views.QuestionList.as_view(), name='question_list'),
path('question_create_param/<int:file_id>/', views.QuestionCreate.as_view(), name='question_create_param'),
path('question_update/<int:pk>', views.QuestionUpdate.as_view(), name='question_update'),

这是我对更新功能的看法

class QuestionUpdate(LoginRequiredMixin, UpdateView):
    login_url = 'login'
    model = Question
    form_class = QuestionForm

    def get_form(self, data=None, files=None, **kwargs): 
        kwargs['pk'] = self.kwargs['pk']
        return QuestionForm(data, files, **kwargs)

    def get_success_url(self):
        messages.success(self.request, 'Question updated')        
        obj = get_object_or_404(Question, pk=self.kwargs['pk'])
        return reverse_lazy('file_status:question_list', args=[obj])

这是我的模板

{% extends "base.html" %}

{% load bootstrap3 %}

{% block content %}
    <h1>Create/Update</h1>
    <form id="question_form" method="post" action="." class="form">
      {% csrf_token %}
      {% bootstrap_form form layout='vertical' %}
      {% buttons %}
        <button type="submit" class="btn btn-primary">Submit</button>
      {% endbuttons %}
    </form>
{% endblock %}

这也是我的模特

class Question(models.Model):
    file = models.ForeignKey(file, on_delete=models.CASCADE)
    query_type = models.CharField(max_length=255, null=True)
    date_sent = models.DateField(auto_now=False, auto_now_add=False, null=True)
    date_completed = models.DateField(auto_now=False, auto_now_add=False, null=True)
    responsible = models.CharField(max_length=255, null=True)
    status = models.CharField(max_length=255, null=True)
    remarks = models.CharField(max_length=255, null=True)

    def __str__(self):
        return str(self.file.id)

    def get_absolute_url(self):
        return reverse('file_status:question_detail', args=[str(self.id)])

1 个答案:

答案 0 :(得分:0)

似乎表格中的某些标签不应该放在首位。我所做的是回到Django项目中的文档,并确定应如何正确声明它。

我的表单以此开头:

<form id="question_form" method="post" action="." class="form">

但是只能是这样:

<form id="question_form" method="post"> 

我不完全确定为什么action和class标签在提交更新表单时会导致错误,如果您知道的话,请启迪。另一个奇怪的事情是,我在其他表单上还有这两个额外的标签,但它恰好在问题对象的UpdateView上失败。

这也是从cookiecutter django crud仿制的。