【发布时间】:2021-02-22 22:21:56
【问题描述】:
我正在尝试将用户添加到日历中的某些事件(使用 fullcalendar),但是当放置表单以向用户请求数据时,此表单不会向我发送数据。如何获取它应该发送的数据?
这是我的 event_register.html:
<div class="col-xl-6">
<p>Apuntarse como invitado.</p>
<form action="" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="first_name">Nombre:</label>
<!--<input id="first_name" name="first_name" placeholder="Nombre del participante" type="text" required="required" class="form-control">-->
<div class="input-group">
{{form.first_name}}
</div>
</div>
<div class="form-group">
<label for="last_name">Apellidos:</label>
<!--<input id="last_name" name="last_name" placeholder="Apellidos del participante" type="text" required="required" class="form-control">-->
<div class="input-group">
{{form.last_name}}
</div>
</div>
<div class="form-group">
<label for="phone">Teléfono:</label>
<!--<input id="phone" name="phone" placeholder="Teléfono del participante" type="text" required="required" class="form-control">-->
<div class="input-group">
{{form.phone}}
</div>
</div>
<div class="form-group">
<label for="email">Correo electrónico:</label>
<!--<input id="email" name="email" placeholder="Correo electrónico del participante" type="text" required="required" class="form-control">-->
<div class="input-group">
{{form.email}}
</div>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary btn-block py-2" value="Enviar">
</div>
</form>
</div>
<div class="col-xl-6">
</div>
这是我的观点.py:
def attend_to(request):
event_form = EventForm()
print('Hola')
if request.method == 'POST':
event_form = EventForm(data=request.POST)
if event_form.is_valid():
Assistant.objects.create(UserManegement=None, Event=request.event_id, frist_name=request.POST["first_name"], last_name=request.POST["last_name"], phone=request.POST["phone"], email=request.POST["email"])
return render(request, "core/home.html")
else:
Assistant.objects.create(UserManegement=request.POST["user"], Event=request.POST["event"])
return render( "core/home.html")
这是我的forms.py:
from django import forms
class EventForm(forms.Form):
first_name = forms.CharField(label="first_name", required=True, widget=forms.TextInput(
attrs={'class':'form-control', 'placeholder':'Escribe tu nombre'}
), min_length=3, max_length=100)
last_name = forms.CharField(label="last_name", required=True, widget=forms.TextInput(
attrs={'class':'form-control', 'placeholder':'Apellidos'}
), min_length=3, max_length=100)
phone = forms.CharField(label="phone", required=True, widget=forms.TextInput(
attrs={'class':'form-control', 'placeholder':'Telefono'}
), min_length=9, max_length=9)
email = forms.EmailField(label="Email", required=True, widget=forms.EmailInput(
attrs={'class':'form-control', 'placeholder':'Escribe tu email'}
), min_length=3, max_length=100)
这是我的 urls.py:
urlpatterns = [
path('', views.attend_to, name='attend_to'),
]
这是我点击按钮时收到的信息:
"POST /event/1/ HTTP/1.1" 200 6249
这是呈现 event_register.html 视图的视图,我有一个带有 fullcalendar 的日历,当点击一个事件时它会显示该模板。
def register_event(request, event_id):
event = get_object_or_404(Event, id=event_id)
return render(request, "events/event_register.html", {'event':event})
提前致谢。
编辑 1: 我不知道现在是什么问题,但是当我点击事件打开包含表单的 url 时,它并没有显示相应的模板。好像没有进入 if request.method == 'POST'。在这里我留下更新的代码。
渲染模板 event_register.html 的视图:
def register_event(request, event_id):
event_form = EventForm()
event = get_object_or_404(Event, id=event_id)
return render(request, "events/event_register.html", {'event':event,
'form':event_form})
包含表单的模板:
<form action="{% url 'attend_to' %}" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="first_name">Nombre:</label>
<!--<input id="first_name" name="first_name" placeholder="Nombre del participante" type="text" required="required" class="form-control">-->
<div class="input-group">
{{form.frist_name}}
</div>
</div>
urls.py 核心加载模板:
urlpatterns = [
#Path del core
path('', views.home, name='home'),
path('about/', views.about, name='about'),
path('event/<int:event_id>/', include('events.urls'), name='attend_to'),
]
用于事件的 urls.py:
urlpatterns = [
path('', views.attend_to, name='attend_to'),
]
包含attend_to 的views.py,它显示了print('Hola'):
def attend_to(request, event_id):
event_form = EventForm()
print('Hola')
if request.method == 'POST':
event_form = EventForm(request.POST)
if event_form.is_valid():
event_form.save()
context = {"form":event_form}
Assistant.objects.create(UserManegement=None, Event=request.event_id, frist_name=context.first_name, last_name=context.last_name, phone=context.phone, email=context.email)
#Assistant.objects.create(UserManegement=None, Event=request.event_id, frist_name=request.POST["first_name"], last_name=request.POST["last_name"], phone=request.POST["phone"], email=request.POST["email"])
#return render(request, "core/home.html")
return HttpResponseRedirect('/')
#return render("core/home.html", context)
#else:
# Assistant.objects.create(UserManegement=request.POST["user"], Event=request.POST["event"])
# return render( "core/home.html")
else:
event_form = EventForm()
return render(request, 'core/home.html', {'form': event_form})
显示服务器的响应:
[24/Feb/2021 10:27:05] "GET / HTTP/1.1" 200 9404
Hola
【问题讨论】:
-
是在提交表单时表单无效还是在模板中根本看不到表单域?
-
@Danoram 如果我取消注释 html 表单的字段,这些字段会出现,但我无法让它发送任何内容。如果我将表单字段与 {form.first_name} 放在一起,则字段不会出现。
-
这些字段没有与
{form.first_name}一起出现,因为您没有将表单放在视图的上下文中。至少,不是来自您提供的代码。这导致了下一个问题,即 html 表单位于名为event_register.html的模板中,但您提供的视图函数不呈现此视图?能否提供渲染event_register.html的视图函数代码 -
我刚刚编辑以显示视图。 @Danoram