Ако имаме този модел:

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})




