Django同一URL下ModelForm提交与数据展示问题求助
解决同一URL实现表单提交与数据展示的问题
嘿,我懂你想在同一个页面既处理表单提交又展示已有数据的需求,完全不用分开两个视图和URL,只需要把展示数据的逻辑整合到现有的get_name视图里就可以了,下面是具体的修改步骤:
1. 修改views.py,整合数据展示逻辑
把获取所有Eintrag数据的代码加到get_name视图中,确保不管是GET请求(初始加载页面)还是POST请求(提交表单后),都能把已有数据传递给模板:
from django.shortcuts import render from django.utils import timezone from django.contrib.auth.decorators import login_required from .forms import NameForm from .models import Eintrag @login_required() def get_name(request): # 先获取所有已有的Eintrag数据 posts = Eintrag.objects.all() form = NameForm() if request.method == 'POST': form = NameForm(request.POST) if form.is_valid(): eintrag = form.save(commit=False) eintrag.Name = request.user eintrag.pub_date = timezone.now() eintrag.save() # 提交成功后重置表单,方便用户继续提交新数据 form = NameForm() # 统一渲染模板,同时传递表单和已有数据 return render(request, 'form/name.html', {'form': form, 'posts': posts})
2. 保留现有URL配置
你的urls.py完全不用修改,因为我们只需要使用同一个get_name视图来处理所有请求:
from django.urls import path from . import views app_name = 'form' urlpatterns = [ path('', views.get_name, name='form'), ]
3. 模板无需额外修改
你已经在name.html中通过{% include "form/post_list.html" %}引入了数据展示的模板,而post_list.html里使用的posts变量现在已经由视图传递过来了,所以模板会自动渲染所有已有数据。
提交表单后,页面会自动显示最新添加的数据,同时表单会被重置,方便用户继续提交新内容。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

