Django 1.9 forms not displaying in template but CSRF token is -


i'm working on django project , i'm having issues model forms rendering in template. i've read through documentation, tutorials searched here; particularly post here had input fields not showing. thought issue similar i'm still not having success. basically, when call {{ form.as_p }} nothing shows in dom. occurs despite csrf token working. here's code model:

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) 

here forms.py model:

from django import forms .models import user, workout, meal 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 

here views.py form:

from .models import user, workout, meal spartan.forms import userform, workoutform, mealform django.shortcuts import render, redirect 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') 

here actual form should rendered on template:

<div class="container">     <h3>create workout</h3>     <form method="post" action=".">         {% csrf_token %}          {{ form.as_p }}      <button class="btn btn-primary" type="submit" value="create workout">create workout</button>     </form> </div> 

as i've stated, token there, along form , button no input fields. if can assist me in pointing out i'm not doing or i'm overlooking it'll appreciated.

thanks!

the problem in view. else block doesn't matter because in request is_valid returning false , you're redirecting user/workouts.html without context.

one solution use if/else statement segment how handle , post:

def workout_form(request):     form = workoutform() # overridden if `is_valid` returns `false`     if request.method == "post":         form = workoutform(data=request.post)         if form.is_valid():             workout = form.save(commit=false)             workout.athlete = request.user             workout.save()             return redirect('user/workouts.html')      return render(request, 'user/workouts.html',               {'form': form}) 

Comments