代码之家  ›  专栏  ›  技术社区  ›  chip

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

  •  0
  • chip  · 技术社区  · 5 年前

    我使用的是基于类的通用视图,特别是updateview。我有其他的对象,我目前有哪些crud的预期。

    现在,我创建了一个新对象,它也使用了基于类的通用视图。我现在的问题是,当我提交一个更新表单时,我无法准确地跟踪在更新表单上按下提交按钮时会发生什么。

    它指向这个url http://localhost:8000/order/question_update/

    但是我没有一个没有参数的问题更新url。我有一个问题更新url,在结尾有一个参数。

    从我的url.py

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

    而且成功URL也没有指向上面的问题更新URL。

    我如何知道当我点击submit按钮时,泛型类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 回复  |  直到 5 年前
        1
  •  0
  •   chip    5 年前

    似乎表单中的某些标记最初不应该在那里。我所做的是回到Django项目中的文档,并确定如何正确声明它。

    我的表格是这样开头的:

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

    但应该是这样的:

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

    我不完全清楚为什么操作和类标记会在提交更新表单时导致错误,如果您知道,请告诉我。另一个奇怪的事情是,我在其他表单上有这两个额外的标记,但是在问题对象的updateview上它只是碰巧失败。

    这也是从CookeCoter Django CRUD模式。