我有一个屏幕,显示用户输入的对象。
在此模板表单上,对象旁边有一个按钮-用户单击按钮时,它应更新该对象(将其标记为“完成”,Boolean
)
我可以在无需实际为UpdateView
创建模板的情况下发布到此'UpdateView
'吗?
我想我可以发布到基于函数的视图,但是我正在尝试使用ClassBasedViews简化事情。
我有一个CreateView
方法,可以正常工作。
class TaskForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.task_location = kwargs.pop('task_location', None)
super(TaskNeededForm, self).__init__(*args, **kwargs)
self.fields['task'].queryset = Task.objects.filter(
id__in=[task_item.task_id for task_item in
TaskReference.objects.filter(
task_location_id=self.task_location,
)
]
)
class Meta:
model = TaskNeed
fields = ['task', 'task_percent', 'task_status']
我的UpdateView看起来像这样:
class TaskNeededUpdate(SuccessMessageMixin, UpdateView):
model = TaskNeeded
fields = ['task', 'task_percent', 'task_status']
success_message = 'Task has been successfully updated.'
template_name = 'tasks/task_needed_form.html' #same form as CreateView
def post(self, request, *args, **kwargs):
self.object = self.get_object()
self.object.task_status = True
self.object.save()
return super().post(request, *args, **kwargs)
表单模板如下:
<form id="update-form" class="" action="" method="post">
{% csrf_token %}
<button class="btn bg-danger text-white" type="submit" name="button">Task Complete</button>
</form>
任务pk
通过URL传递:
path('<int:location_id>/task-needed/update/<int:pk>/', views.TaskNeededUpdate.as_view(), name='update_task'),