Ако имаме този модел:
from django.db import models
from django.utils import timezone
class BlogPost(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
published_date = models.DateTimeField(blank=True, null=True)
views = models.IntegerField(default=0)
Ако във view-то след if request.method == "POST": запишем само този код:
1. Сценарий:
form = BlogPostForm(request.POST)
if form.is_valid():
instance = form.save(commit=True)
author: Няма да бъде попълнено автоматично.
published_date: Няма да бъде попълнено автоматично.
views: Ще бъде попълнено автоматично с 0 поради зададената стойност по подразбиране.
2. Сценарий:
Ако искаме author и published_date да бъдат зададени, ще трябва да го направим ръчно:
form = BlogPostForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user # Задаване на автора ръчно
instance.published_date = timezone.now() # Задаване на датата на публикуване ръчно
instance.save() # Записване на обекта в базата данни
3. Как ще използваме формата във view-то:
from django.utils import timezone
from django.shortcuts import render, redirect
from .forms import BlogPostForm
def create_blog_post(request):
if request.method == "POST":
form = BlogPostForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user # Задаваме текущия потребител като автор
instance.published_date = timezone.now() # Задаваме текущата дата и час като дата на публикуване
instance.save() # Записваме обекта в базата данни
return redirect('success_view') # Пренасочване след успешен запис
else:
form = BlogPostForm()
return render(request, 'create_blog_post.html', {'form': form})