【发布时间】:2016-12-06 14:13:17
【问题描述】:
我正在处理一个 Django 项目,但在我的模板中呈现模型表单时遇到问题。我已经阅读了through the documentation,教程以及在这里搜索;特别是这个帖子有人had with their input fields not showing。我认为我的问题是相似的,但我仍然没有任何成功。基本上,当我调用{{ form.as_p }} 时,DOM 中没有显示任何内容。尽管我的 csrf 令牌工作,但仍会发生这种情况。这是我的模型的代码:
class Workout(models.Model):
upper_body = models.CharField(max_length=30, help_text="ex: Bench Press, Shoulder Press, Shrugs")
lower_body = models.CharField(max_length=30, help_text="Squats, Lunges, Deadlifts")
explosive = models.CharField(max_length=30, help_text="Hang Cleans, Box Jumps, Hang Snatch")
cardio = models.CharField(max_length=30, help_text="Jogging, Cycling, 110s")
speed = models.CharField(max_length=30, help_text="Sprints, 10 yard starts, Speed Sled")
skill = models.CharField(max_length=30, help_text="Boxing, Jump Shooting, Route Running")
athlete = models.ForeignKey(User, related_name='athlete')
def __unicode__(self):
return u"{}".format(self.athlete)
这是该模型的forms.py:
from django import forms
from .models import User, Workout, Meal
from django.forms import ModelForm
# Beginning of Workout Form
class WorkoutForm(forms.ModelForm):
class Meta:
model = Workout
fields = ["upper_body",
"lower_body",
"explosive",
"cardio",
"speed",
"skill"]
# End of Workout Form
这是我的views.py 表单:
from .models import User, Workout, Meal
from Spartan.forms import UserForm, WorkoutForm, MealForm
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseRedirect
def workout_form(request):
form = WorkoutForm(request.POST or None)
if form.is_valid():
workout = form.save(commit=False)
workout.athlete = request.user
workout.save()
return redirect('user/workouts.html')
这是应该在模板上呈现的实际表单:
<div class="container">
<h3>Create your workout</h3>
<form method="POST" action=".">
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-primary" type="submit" value="Create Your Workout">CREATE WORKOUT</button>
</form>
</div>
正如我所说,令牌在那里,连同表单和按钮,只是没有输入字段。如果有人可以帮助我指出我没有做什么或我忽略了什么,将不胜感激。
谢谢!
【问题讨论】:
-
在视图的
else部分,添加括号,构造表单对象-form = WorkoutForm() -
@JRodDynamite 的建议应该可以解决问题,但您实际上根本不需要
else块。你已经在做form = WorkoutForm(request.POST or None),它为 POST 和 GET 请求创建了一个表单。 -
@Alasdair - 是的,你是对的。没注意到。因此,只需删除
else块即可解决 OP 的问题。 -
感谢@Alasdair 和@JRodDynamite 我删除了
else块,它仍然没有渲染。 -
除了
else块之外,我无法在您的代码中发现任何问题。希望你能解决问题。
标签: django forms django-1.9