Показать другое содержимое, кроме формы, в FormView?
Мне очень не нравится дизайн django CBS, который делает вещи не гибкими. Я хотел бы иметь страницу, верхняя часть которой показывает содержимое объектов, а нижняя часть имеет форму для размещения.
CBS formview
class EditStudent(FormView):
template_name = "editstudent.html"
model = models.Student
success_url = "/home"
Как я могу получить объекты учеников и показать их на шаблоне. Спасибо.
Объект "NoneType" не является вызываемым: Я получаю эту ошибку, когда не указываю класс формы. Создан класс формы 'StForm', связанный с моделью 'Student'. В классе представления EditStudent был унаследован класс CreateView, поскольку данные не были сохранены в базу данных с помощью FormView.
Замените bboard на название папки, в которой находятся ваши шаблоны.
У меня так: templates/bboard, которые находятся в папке приложения.
template_name = 'bboard/tam_form.html'
Строка success_url указывает путь, основанный на имени пути.
success_url = reverse_lazy('student')
Пять самых последних записей также передаются в контексте.
context['students'] = Student.objects.order_by('-pk')[:5]
В шаблоне первые пять записей отображаются сверху, а ниже отображается форма для заполнения.
forms.py
from django.forms import ModelForm
from .models import Student
class StForm(ModelForm):
class Meta:
model = Student
fields = '__all__'
views.py
from .models import Student
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .forms import StForm
class EditStudent(CreateView):
template_name = 'bboard/editstudent.html'
form_class = StForm
success_url = reverse_lazy('student')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['students'] = Student.objects.order_by('-pk')[:5]
return context
urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('student/', EditStudent.as_view(), name='student'),
]
editstudent.html
<h4>
{% for aaa in students %}
<p>{{ aaa }}</p>
{% endfor %}
</h4>
<h2>form</h2>
<form method="post" action="{% url 'student' %}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="adding">
</form>