Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Пренаписване на метода save() и form_valid() в class based views
- 1. Ако пренапишеm метода save() в МОДЕЛА, логиката ще се прилага за всички бъдещи view-та, които записват или актуализират обекта, независимо дали са CreateView, UpdateView, или друг начин за създаване/промяна на обекти.
- 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)
- def save(self, *args, **kwargs):
- if not self.published_date:
- self.published_date = timezone.now()
- if not self.author:
- self.author = kwargs.pop('user', None)
- super().save(*args, **kwargs)
- 2. Ако пренапишем само form_valid() в CreateView или UpdateView, тогава тази логика ще се прилага само за конкретното view. В другите view-та ще трябва отново да я имплементираш.
- from django.urls import reverse_lazy
- from django.utils import timezone
- from django.views.generic import CreateView
- from .models import BlogPost
- from .forms import BlogPostForm
- class BlogPostCreateView(CreateView):
- model = BlogPost
- form_class = BlogPostForm
- template_name = 'create_blog_post.html'
- success_url = reverse_lazy('success_view')
- def form_valid(self, form):
- # Пренаписваме формата преди да запишем
- instance = form.save(commit=False)
- instance.author = self.request.user # Задаваме текущия потребител като автор
- instance.published_date = timezone.now() # Задаваме текущата дата и час
- instance.save() # Записваме в базата данни
- return super().form_valid(form)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement