web-dev-qa-db-fra.com

Date de création automatique pour Django objets de formulaire modèle?

Quel est le meilleur moyen de définir une date de création pour un objet automatiquement, ainsi qu'un champ qui enregistrera la dernière mise à jour de l'objet?

models.py:

created_at = models.DateTimeField(False, True, editable=False)
updated_at = models.DateTimeField(True, True, editable=False)

views.py:

if request.method == 'POST':
    form = MyForm(request.POST)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.user = request.user
        obj.save()
        return HttpResponseRedirect('obj_list')

Je reçois l'erreur:

objects_object.created_at may not be NULL

Dois-je définir manuellement cette valeur moi-même? Je pensais que c’était le but des paramètres passés à DateTimeField (ou sont-ils juste des valeurs par défaut, et depuis que j’ai défini editable=False ils ne sont pas affichés sur le formulaire, donc ne sont pas soumis dans la demande, et donc ne sont pas mis dans le formulaire?).

Quelle est la meilleure façon de faire cela? Un __init__ méthode?

120
Roger

Vous pouvez utiliser le auto_now et auto_now_add options pour updated_at et created_at respectivement.

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
256
Manoj Govindan