Reputation: 386
I'm new to python and Django. I'm trying to display a form which shows the fields from a model. the model and form are different apps.
here is my Users Model
from django.db import models
# Create your models here.
class Users(models.Model):
first_name=models.CharField(max_length=128)
last_name=models.CharField(max_length=128)
email=models.EmailField(max_length=256,unique=True)
here is my forms.py from registerapp
from django import forms
from apptwo.models import Users
class NewUserForm(forms.ModelForm):
class Meta():
model = Users
fields= '__all__'
here is my views.py from registerapp
from django.shortcuts import render
from registerapp.forms import NewUserForm
from apptwo.views import index
def register(request):
form=NewUserForm()
if request.method=="POST":
form =NewUserForm(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
print("error form invalid")
return render(request,'registerapp/register.html')
my register.html file
<div class="container">
<h1>Register here</h1>
<form method="POST">
{{ form.as_p }}
{%csrf_token%}
<input type="submit" class="btn btn-primary" value="submit">
</form>
</div>
this is what i'm getting register.html
please help me find my mistakes
Upvotes: 0
Views: 72
Reputation: 47354
render()
method takes context
argument which contains dict of template's variables and its values. You forgot to pass your form with template context. You need to define context like this context = {'form': form}
and pass it as render's
argument.
def register(request):
form=NewUserForm()
if request.method=="POST":
form =NewUserForm(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
print("error form invalid")
context = {'form': form}
return render(request,'registerapp/register.html', context)
Upvotes: 2