任务:创建博客文章时,用户不应填写开始日期和结束日期的字段,而应自动填写当前日期。
问题:如何在字段 DateField 中传递日期?我尝试了很多选项,但没有任何帮助,帖子只是没有保存......
可以使用 DateField 类型的字段进行更简单的操作变体吗?如果你使用 auto_now_add=True Django 会抱怨,因为 此设计已在此模型中使用。
模型.py
beginning_date = models.DateField('Начало события', default=date.today, blank=True)
ending_date = models.DateField('Окончание события', default=date.today, blank=True)
视图.py
if request.method == 'POST':
new_post_form = NewPostForm(request.POST or None, request.FILES or None)
if new_post_form.is_valid():
post = new_post_form.save(commit=False)
post.author = request.user
post.beginning_date = date.today
post.ending_date = date.today
post.is_blog_post = True
post.save()
完成models.py
class Post(models.Model):
title = models.CharField('Название', max_length=255)
slug = models.CharField('Идентификатор', max_length=255, db_index=True, unique=True)
content = models.TextField('Пост')
image = models.ImageField('Обложка', default='post_image.png', upload_to='posts_images', null=True)
author = models.ForeignKey(VertexUser, related_name='post_author', on_delete=models.CASCADE, verbose_name='Автор')
views = models.ManyToManyField(VertexUser, related_name='post_views', verbose_name='Просмотры', blank=True)
like = models.ManyToManyField(VertexUser, related_name='users_post_like', verbose_name='Лайки', blank=True)
dislike = models.ManyToManyField(VertexUser, related_name='users_post_dislike', verbose_name='Дизлайки', blank=True)
publication_date = models.DateTimeField('Дата публикации', auto_now_add=True)
editing_date = models.DateTimeField('Дата редактирования', auto_now=True)
is_event = models.BooleanField('Событие', default=False)
beginning_date = models.DateField('Начало события', auto_now_add=True)
ending_date = models.DateField('Окончание события', auto_now_add=True)
is_news = models.BooleanField('Новость', default=False)
is_blog_post = models.BooleanField('Пост', default=False)
is_edit = models.BooleanField('Отредктированно', default=False)
on_main = models.BooleanField('На главную', default=False)
active = models.BooleanField('Опубликованно', default=False)
def __str__(self):
return f'{self.title} | Автор: {self.author} | Опубликованно {self.active}'
def get_absolute_url(self):
return reverse('post_detail_page', args=[str(self.slug)])
class Meta:
verbose_name = 'Пост'
verbose_name_plural = 'Посты'
事实证明,问题在于提交表单时,DateField类型字段不能为空,日期格式必须为YYYY-DD-MM(年-日-月)。因此,为了实现我需要的功能,结果是这样的:
视图.py
因此,在解析 request.POST 时,我设法将当前日期传递给 post.beginning_date 并成功写了帖子。
重要的! time.strftime 区分大小写。