Как включить предыдущие годы в форму Django Model
Простите меня, если этот вопрос уже задавался
.
У меня есть блог и я использую шаблон, который вы можете увидеть на сайте Djangos (с небольшими изменениями)
.
Когда я создаю новый блог, я могу выбрать дату от 1 января 2022 года до 31 декабря
.
Однако есть некоторые записи, которые я сделал в прошлом году и хотел бы включить правильную дату для них.
Любая помощь будет оценена
p.s. В качестве базы данных я использую Sqlite
View
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404, render, redirect
from django.views.generic import (
CreateView,
ListView,
UpdateView,
DetailView
)
from tags.models import Tag
from .forms import BlogForm
from .models import Blog
class BlogCreateView(LoginRequiredMixin, CreateView):
template_name = 'blog/create_blog.html'
form_class = BlogForm
queryset = Blog.objects.all()
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
class BlogUpdateView(LoginRequiredMixin, UpdateView):
template_name = 'blog/create_blog.html'
form_class = BlogForm
queryset = Blog.objects.all()
def form_valid(self, form):
return super().form_valid(form)
def blog_delete_view(request, slug):
obj = get_object_or_404(Blog, slug=slug)
if request.method == "POST":
obj.delete()
return redirect('blog:home')
context = {
"object": obj
}
return render(request, "blog/delete_blog.html", context)
class BlogListView(ListView):
template_name = "blog/home.html"
model = Blog
blog_public = model.objects.filter(is_public=True, tags__public=True)
def get_context_data(self, *args, **kwargs):
context = super(BlogListView, self).get_context_data(*args, **kwargs)
request = self.request
user = request.user
blog_tag = Tag.objects.filter(name="blog").first()
if user.is_authenticated:
blog_user = self.model.objects.filter(user=user)[:5]
else:
blog_user = None
blog_obj = self.model.objects.filter(tags=blog_tag, is_public=True)[:5]
context['blog_obj_public'] = self.blog_public
context['user_blog_obj'] = blog_user
context['title'] = "Blog"
context['description'] = "Blogs"
context['blog_obj'] = blog_obj
return context
def get_queryset(self, *args, **kwargs):
return Blog.objects.all()
class BlogDetailSlugView(DetailView):
template_name = "blog/detail.html"
model = Blog
def get_context_data(self, *args, **kwargs):
context = super(BlogDetailSlugView, self).get_context_data(*args, **kwargs)
slug = self.kwargs.get('slug')
try:
blog_obj = Blog.objects.get(slug=slug)
except:
blog_obj = None
context['blog_list'] = Blog.objects.all()
context['title'] = blog_obj.title
context['description'] = blog_obj.blog_post
return context
Модель
from django.contrib.auth import get_user_model
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.shortcuts import reverse
from eCommerce.utils import unique_slug_generator
from tags.models import Tag
User = get_user_model()
class BlogManagerQuerySet(models.query.QuerySet):
def public_post(self):
return self.filter(is_public=True)
class BlogManager(models.Manager):
def get_queryset(self):
return BlogManagerQuerySet(self.model, using=self._db)
def public_post(self):
return self.get_queryset().public_post()
class Blog(models.Model):
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True)
date = models.DateTimeField(auto_now=False)
blog_post = models.TextField(blank=True, null=True)
tags = models.ManyToManyField(Tag, blank=True)
is_public = models.BooleanField(default=False)
updated = models.DateTimeField(auto_now=True)
meta_data = models.TextField(null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('-date',)
objects = BlogManager()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("blog:detail", kwargs={"slug": self.slug})
@receiver(pre_save, sender=Blog)
def blog_pre_save_receiver(sender, instance, **kwargs):
if not instance.slug:
instance.slug = unique_slug_generator(instance)
form.py
from django import forms
import datetime
from .models import Blog
class BlogForm(forms.ModelForm):
class Meta:
now = datetime.datetime.now().date()
model = Blog
fields = ['title', 'date', 'blog_post', 'tags', 'is_public']
widgets = {
"date": forms.SelectDateWidget(
attrs={
"value": now
}
)
}