我正在使用基于类的通用视图,特别是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)])
答案 0 :(得分:0)
似乎表格中的某些标签不应该放在首位。我所做的是回到Django项目中的文档,并确定应如何正确声明它。
我的表单以此开头:
<form id="question_form" method="post" action="." class="form">
但是只能是这样:
<form id="question_form" method="post">
我不完全确定为什么action和class标签在提交更新表单时会导致错误,如果您知道的话,请启迪。另一个奇怪的事情是,我在其他表单上还有这两个额外的标签,但它恰好在问题对象的UpdateView上失败。
这也是从cookiecutter django crud仿制的。