Im trying to create a model form on django but it doesnt want to render even though I mapped it properly and created the path.
models.py
from django.db import models # Create your models here. Media_Choices = ( ("TV", "TV"), ("Radio", "Radio"), ("Youtube", "Youtube"), ("Podcast", "Podcast"), ) class Appear(models.Model): Show = models.CharField(max_length=100) Media = models.CharField(max_length=30, blank=True, null=True, choices=Media_Choices) Episode = models.IntegerField() Date = models.DateField(max_length=100) Time = models.TimeField(auto_now=False, auto_now_add=False) Producer = models.CharField(max_length=100) Producer_Email = models.EmailField(max_length=254) def __unicode__(self): return self.Show + ' ' + self.Producer_Email
forms.py
from django import forms from django.core.exceptions import ValidationError from django.forms import ModelForm from .models import Appear class AppsForm(ModelForm): class Meta: model = Appear fields = '__all__' def clean_Producer_Email(self): Producer_Email = self.cleaned_data.get('Producer_Email') if (Producer_Email == ""): raise forms.ValidationError('field cannot be left empty') for instance in Appear.objects.all(): if instance.Producer_Email == Producer_Email: raise forms.ValidationError('Please fill in correct email') return Producer_Emailenter
views.py
from django.shortcuts import render from .forms import AppsForm # Create your views here. def AppS(request): form = AppsForm() context = {'forms': form} return render(request, 'AppsForm.html', context)
it refuse to render but it displays the html tag that is in the file but not the fields from the form. this is the html template
AppsForm.html
{% extends 'base.html' %} {% block content %} {% load crispy_forms_tags %} <form action="" method="POST"> {% csrf_token %} {{ form|crispy }} <input type="submit" value="submit"> </form> {% endblock %}
Advertisement
Answer
you view is wrong try this
def AppS(request): if request.method == 'POST': form = AppsForm(request.POST) if form.is_valid(): form.save() return redirect('/') else: form = AppsForm() return render(request, 'AppsForm.html', {'form': form})
and in your html
<form method="POST" class="" action=""> {% csrf_token %} {{ form|crispy }} <input type="submit" class="" value="Submit"> </form>
now you are good to go and tell me if you still get error