Django - Можно ли использовать один UpdateView для обновления полей на разных страницах?
Допустим, у меня есть модель Student с полями name и age, и у меня есть страница с классом DetailView, отображающим эти поля. Допустим, вместо того, чтобы иметь одну кнопку "обновить", которая приведет меня на форму для обновления всех полей моей модели сразу, я хочу иметь отдельную кнопку для каждого поля, которая приведет меня на отдельную страницу с формой для его обновления.
Я знаю, как я могу сделать это с помощью отдельного HTML файла и отдельного класса UpdateView для каждого поля, но кажется, что должен быть более чистый способ.
В первом 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>
Urls:
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",)
Надеюсь, это имеет смысл! Спасибо за любую помощь :)
Самый простой способ сделать это - переопределить fields в вашем файле urls.py.
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 принимает аргументы ключевых слов, которые используются для переопределения атрибутов классов для данного вхождения.