7
votes

Django: Modèles Dernière date de modement Mod et Nombre de mod

J'ai un modèle Django appelé blog .

J'aimerais ajouter un champ à mon modèle actuel qui est pour Last_Modified_date. Je sais comment définir une valeur par défaut, mais je voudrais d'une manière ou d'une autre pour que cela soit mis à jour automatiquement à chaque fois que je modifie l'entrée de blog via l'interface d'administration.

Y a-t-il un moyen de forcer cette valeur à l'heure actuelle de chaque site d'administration?

Il y aurait également un moyen d'ajouter un champ mod_count et de l'avoir calculé automatiquement sur chaque modification de l'entrée de blog de site admin?


0 commentaires

4 Réponses :


13
votes

Créer un DateTimefield code> dans votre modèle. Avoir la mise à jour chaque fois que cela est enregistré. Cela nécessite que vous utilisiez l'option auto_now_add code>:

class EntryAdmin(admin.ModelAdmin):

def save_model(self, request, obj, form, change):
    if change:
        obj.change_count += 1
    obj.save()


3 commentaires

Merci, connaissez-vous un moyen d'incrémenter automatiquement un numéro de 1 sur chaque sauvegarde?


Oui, je pense que vous devez surcharger le modèle.Save () pour faire l'incrément pendant la sauvegarde. James Bennett a un article à ce sujet à B-List.org, comme je me souviens. Son article a eu à faire avec la sauvegarde de l'utilisateur actuel sur un enregistrement de l'interface administrative. Je n'ai pas encore trouvé l'article ....


Depuis au moins 1,4, les «horodatages utiles» «utiles». Remarque est sur auto_now plutôt que auto_now_add . Ce dernier n'utilisera que l'heure actuelle sur la création, non mise à jour.



2
votes

Il y a un certain nombre de façons d'augmenter le nombre d'édition à chaque enregistrement.

Le modèle lui-même a une méthode Save () et le modèle d'administration a une méthode modèle_save ().

Ainsi, par exemple, disons que vous vouliez qu'il s'agisse d'augmenter quand il a été édité avec l'outil Admin .... xxx

Vous pouvez faire du code similaire éteint de l'événement Model Save () également.


Quelque chose d'autre, vous pouvez être intéressé par IS Extensions Django-Command . Il ajoute 2 champs qui peuvent vous être utiles:

  • CreationDateTimeMefield - DateTimefield qui définira automatiquement la date à laquelle l'objet est enregistré pour la première fois dans la base de données.

  • ModificationDateTimefield - DateTimeField définira automatiquement la date de sa date lorsqu'un objet est enregistré dans la base de données.


3 commentaires

Pouvez-vous me signaler à la documentation indiquant AUTO_NOW_ADD est obsolète? Aussi récemment que 2008-06-15, cette affirmation a été refusée: «Je ne sais pas qui est anonyme, mais auto_now_add n'a pas encore été obsolète. Il a été discuté de dépréciation et il y a une meilleure façon (par défaut = DateTime .now), mais pour le moment, auto_now_add est toujours une option valide. " code.djangoproject.com/ticket / 7390


J'ai copié la description du champ de la page du projet d'application Django-Command-Extensions. Vous devriez parler avec eux à propos de cette affirmation.


Pour ne pas propager mal-information juste au cas où , j'ai supprimé cela de mon texte collé.



0
votes

Vous pouvez également utiliser une solution middleware trouvée ici: https://bitbucket.org/amenasse/django-current-user/src/7C3C90C8F5E854FEDCB04479D912C1B9F6F2A5B9/CURrent_USER?AT=Default

Paramètres.py XXX

modèles.py xxx


0 commentaires

6
votes

La réponse acceptée n'est plus correcte.

Pour les versions Django plus récentes, vous devrez utiliser le paramètre auto_now = true plutôt que le auto_now_add = true , Ce qui ne fera que définir la valeur du champ lorsque l'objet est initialement créé.

du Documentation :

datefield.auto_now_add¶

Définissez automatiquement le champ pour maintenant quand le objet est créé pour la première fois. Utile pour la création d'horodatages.

La fonctionnalité souhaitée est maintenant implémentée par auto_now :

datefield.auto_now nous

Définissez automatiquement le champ pour maintenant chaque fois que la objet est enregistré.

afin d'obtenir un horodatage auto-mis à jour, un modèle doit être créé comme suit: xxx

à augmenter mod_count chaque modèle La surcharge modifiée est modifiée la méthode (code> xxx


0 commentaires