2016-08-13 3 views
1

Erstens hat diese Frage bereits here gefragt worden, aber die Antwort nicht funktioniert, und ist auch für Django 1.3. Nach gründlichen Recherchen zu ähnlichen Fragen zu SO, den Django Docs und allgemeinem Googlen kann ich immer noch keine funktionierende Antwort finden. Nicht wirklich ein wichtiges Detail, aber es nervt sowohl beim Versuch, das Formular zu verwenden, das ich erstelle, als auch weil ich es nicht lösen kann.Set Standarddatum mit Django SelectDateWidget

Wenn die SelectDateWidget in einer Modelform mit, ich will das den Standard auf dem Widget heute Datum einzustellen können.

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) 

Ich gehe davon aus ich irgendwo etwas Syntaxfehler habe, habe aber bei der Suche nach ihm keine Freude hat.

+0

Welchen Fehler bekommen Sie? Ich –

+0

@ v.s.danilov nicht einen Fehler an sich nur das Widget ändert sich nie von voreingestellt auf 1. Januar 2016, egal, wie ich spielen, um mit dem Modell oder Modelform –

Antwort

1

Sieht so aus, als gäbe es einen subtilen Unterschied bei der Einstellung der Standardzeit für und DateField.

DateField.auto_now_add eingestellt das Feld automatisch auf, wenn das jetzt Objekt erstellt wird. Nützlich für die Erstellung von Zeitstempeln. Beachten Sie, dass das aktuelle Datum immer verwendet wird; Es ist nicht nur ein Standardwert, der überschrieben werden kann. Selbst wenn Sie für dieses Feld einen Wert festlegen, wenn das Objekt erstellt wird, wird es ignoriert. Wenn Sie ändern Sie dieses Feld in der Lage sein wollen, setzen Sie den folgenden statt auto_now_add = True:

Für Datefield: default = date.today - von datetime.date.today() Für Datetimefield: default = timezone.now - von django.utils.timezone.now()

Also, Sie date.today verwenden möchten, anstatt timezone.now.

+0

funktioniert perfekt, danke freundlich –

Verwandte Themen