Django - 我可以使用一个 UpdateView 来更新不同页面上的字段吗?

Django - Can I use one UpdateView to update fields on separate pages?

假设我有一个 Student 模型,其中包含姓名和年龄字段,并且我有一个包含显示这些字段的 DetailView class 的页面。比方说,我不想使用一个“更新”按钮将我带到一个表单来一次更新模型的所有字段,而是希望每个字段都有一个单独的按钮,将我带到一个带有表单的单独页面来更新它。

我知道如何使用单独的 HTML 文件和单独的 UpdateView class 为每个字段执行此操作,但似乎应该有更简洁的方法。

在第一个 HTML 文件中,我有两个按钮:

<a href="{% url 'update_name' pk=student.pk%}">Update name</a>
<a href="{% url 'update_age' pk=student.pk%}">Update age</a>

第二个我有表格:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Submit">
</form>

网址:

urlpatterns = [
    path('<int:pk', views.StudentDetailView.as_view(), name="detail"),
    path('update_name/<int:pk>', views.StudentUpdateView.as_view(), name="update_name"),
    path('update_age/<int:pk>', views.StudentUpdateView.as_view(), name="update_age"),
]

观看次数:

class StudentUpdateView(UpdateView):
    model = models.Student
    template_name = 'update_student.html'

我想我正在寻找某种可以放在我的视图中的 if 语句,例如:

if condition:
    fields = ("name",)
elif condition2:
    fields = ("age",)

希望这是有道理的!感谢您的帮助:)

最简单的方法是覆盖 urls.py 文件中的 fields

urlpatterns = [
    path('<int:pk', views.StudentDetailView.as_view(), name="detail"),
    path('update_name/<int:pk>', views.StudentUpdateView.as_view(fields=['name']), name="update_name"),
    path('update_age/<int:pk>', views.StudentUpdateView.as_view(fields=['age']), name="update_age"),
]

View.as_view 接受关键字参数,用于覆盖该事件的 类 属性。