#django #django-views
Вопрос:
Я думаю, что у меня есть довольно простой просмотр обновлений, но объект не сохраняется, когда я отправляю форму. Функция success_url никогда не вызывается. Когда я нажимаю Update
кнопку, форма обновляется, и я остаюсь на той же странице. Я могу обновить объект через администратора, поэтому я считаю, что модель работает нормально. Я не получаю никаких ошибок.
url-адреса
path('classroomdetail/<uuid:classroom_id>/',
views.classroomdetail, name='classroomdetail'),
path('classedit/<uuid:pk>/', views.ClassroomUpdateView.as_view(), name='classupdate'),
Модель
class Classroom(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
classroom_name = models.CharField(max_length=20)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
students = models.ManyToManyField(Student)
class Meta:
constraints = [models.UniqueConstraint(
fields=['user', 'classroom_name'], name="unique-user-classroom")]
def __str__(self):
return self.classroom_name
число просмотров
class ClassroomUpdateView(UpdateView):
model = Classroom
fields = ['classroom_name']
template_name_suffix = '_update'
success_url = reverse_lazy('gradebook:classroom')
шаблон
{% extends 'base.html' %} {% load static %} {% block content %}
{% load crispy_forms_tags %}
<div class="container">
<div class="row">
<div class="col">
<h3>This Classroom belongs to {{ classroom.course }}</h3>
</div>
</div>
<div class="row">
<div class="col-md-3">
<form class="form-group">
{% csrf_token %}{{ form|crispy }}
<input type="submit" class="btn btn-primary mt-2 mb-2" value="Update">
</form>
</div>
</div>
<div class="row">
<div class="col-md-3">
<a href="{% url 'gradebook:classroomdetail' object.pk %}"><div class="ps-2">Cancel</a>
</div>
</div>
</div>
{% endblock content %}
Ответ №1:
Мне чего-то не хватало method="post"
в моем шаблоне. Правильная линия:
<form method="post" class="form-group">