【问题标题】:Set default date with Django SelectDateWidget使用 Django SelectDateWidget 设置默认日期
【发布时间】:2016-12-20 10:30:58
【问题描述】:

首先,这个问题已经被问过here,但是答案不起作用,并且也适用于 Django 1.3。在对 SO、Django Docs 和一般谷歌搜索的类似问题进行了广泛研究之后,我仍然找不到有效的答案。不是真正的主要细节,但在尝试使用我正在创建的表单时很烦人,因为我无法解决它。

在 ModelForm 中使用 SelectDateWidget 时,我希望能够将小部件的默认设置为今天的日期。

forms.py

from django import forms
from .models import Article
from django.utils import timezone

class ArticleForm(forms.ModelForm):
publish=forms.DateField(widget=forms.SelectDateWidget(), initial = timezone.now)
class Meta:
    model = Article
    fields = [
    'title',

      ...

    'publish',
    ]

models.py

from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models
from django.utils import timezone

from Blog.models import Category

class Article(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length = 120, unique=True)

      ...

    publish = models.DateField(default=timezone.now)

我假设我在某处有一些语法错误,但发现它并不快乐。

【问题讨论】:

  • 你得到什么错误?
  • @v.s.danilov 我本身没有收到错误,只是小部件从预设到 2016 年 1 月 1 日永远不会改变,无论我如何使用 Model 或 ModelForm

标签: python django django-models django-forms


【解决方案1】:

在为DateTimeFieldDateField 设置默认时间时似乎存在细微差别。

DateField.auto_now_add 自动将字段设置为现在 首先创建对象。用于创建时间戳。注意 始终使用当前日期;这不仅仅是一个默认值 你可以覆盖。所以即使你为这个字段设置了一个值 创建对象,它将被忽略。如果你想能够 修改此字段,设置以下内容而不是 auto_now_add=True:

对于 DateField:default=date.today - 从 datetime.date.today() 对于 DateTimeField:default=timezone.now - 来自 django.utils.timezone.now()

因此,您应该使用date.today 而不是timezone.now

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 2012-09-13
    • 2016-05-06
    • 2012-02-03
    • 1970-01-01
    • 2010-12-06
    • 2013-01-12
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多