2016-08-13 129 views
1

首先,这个问题已被问到here,但是答案不起作用,并且也适用于Django 1.3。在对SO,Django Docs和Google一般搜索等类似问题进行了大量研究之后,我仍然找不到有效的答案。不是一个真正的主要细节,但是在尝试使用我创建的表单时,以及因为我无法解决这个问题而烦恼。使用Django SelectDateWidget设置默认日期

在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) 

我假设我有一些语法错误的地方,但有过发现它没有喜悦。

+0

你会得到什么错误? –

+0

@ v.s.danilov我本身并没有遇到错误,只是小部件从未被预设更改为2016年1月1日,无论我如何玩模型或ModelForm –

回答

1

设置DateTimeFieldDateField的默认时间时,看起来存在细微差别。

DateField.auto_now_add当首次创建对象 时,自动将该字段设置为now。用于创建时间戳。请注意, 总是使用当前日期;它不仅是您可以覆盖的默认值。所以即使您在创建对象时为此字段设置了一个值,它也会被忽略。如果您希望能够 修改此字段中,设置以下的,而不是auto_now_add = TRUE:

为的DateField:默认= date.today - 从datetime.date.today() 对于DateTimeField字段:默认= timezone.now - 从django.utils.timezone.now()

所以,你需要使用date.today而非timezone.now

+0

完美地工作,谢谢亲切 –