Django Model Form
Django Model Form
Contents:
Step 1: Setup
INSTALLED_APPS = [
'blog.apps.BlogConfig',', # HERE
'django.contrib.admin',
'django.contrib.auth',
# ...
]
Edit the blog app models.py file and add a new class called
Post to it:
class Post(models.Model):
title = models.TextField(default='',
(default='',
blank=True)
Run the following commands:
admin.site.register(Post)
Step 2: Create form
class PostForm(ModelForm):
):
class Meta:
model = Post
fields = ['title']
Edit the blog/views.py file and add a new view function called create to it:
def create(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
return redirect('blog_create')
else:
form = PostForm()
return render(request,
'blog/create.html',
{
'form': form
})
Edit the main urls.py file and add these lines to it:
import blog.views
urlpatterns = [
path('create/', blog.views.create,
blog.views.create name='blog_create'),
path('admin/', admin.site.urls),
),
]
Create a file called create.html in the blog/templates/blog
directory and add these lines to it:
return render(request,
'blog/edit.html',
{
'form': form,
'post': post
})
Create a file called edit.html in the blog/templates/blog
directory and add these lines to it:
<h1>Edit post</h1>
<form action="{% url 'blog_edit
blog_edit' post.pk %}"
method="post">
{% csrf_token %}
{{ form.as_p }}
<button class="button" type="submit">Update</button>
</form>
Edit the main urls.py file and add this line to it:
import blog.views
urlpatterns = [
path('create/', blog.views.create,
blog.views.create name='blog_create'),
# START
path('edit/<int:pk>/', blog.views.edit,
blog.views.edit name='blog_edit'),
# END
path('admin/', admin.site.urls),
]
Visit /edit/<id>/ to edit an item:
ep 4: Delete form
it forms.py file in the blog app directory and add these lines to it:
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['title']
# START
class PostDeleteForm(ModelForm):
class Meta:
model = Post
fields = []
# END
it the blog/views.py file and add a new view function called delete to it:
<h1>Delete post</h1>
<form action="{% url 'blog_delete'' post.pk %}" method="post">
{% csrf_token %}
{{ form }}
</form>
dit the main urls.py file and add this line to it:
import blog.views
urlpatterns = [
path('create/', blog.views.create,, name='blog_create'),
name='
path('edit/<int:pk>/', blog.views.edit,
blog.views.edit name='blog_edit'),
# START
path('delete/<int:pk>/', blog.views.delete,
blog.views.delete name='blog_delete'),
# END
path('admin/', admin.site.urls),
]
Visit delete/<id>/ to delete an item: