11
votes

Django: Comment changer les choix d'Admintimeewidget

Le admintimeewidget rendu dans admin pour un DateTimefield affiche une icône d'une horloge et lorsque vous cliquez, vous avez le choix entre: "Maintinement de minuit 6h00".

Comment puis-je modifier ces choix en "16h 17h 18h"?


0 commentaires

6 Réponses :


10
votes

Sous-classe Admintimeewidget Code> Pour inclure un DateTimeShortCutCutCutS.js modifié (Accéder à celui-ci dans une SEC), puis Sous-classe AdminsplitDateTime Code> Pour inclure votre sous-classement MyAdminTIMewidget Code> Au lieu de la valeur par défaut Django One:

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.DateTimeField: {'widget': MyAdminSplitDateTime},
    }


0 commentaires

13
votes

Chris a une bonne réponse. Comme une alternative, vous pouvez le faire en utilisant simplement JavaScript. Placez le JavaScript suivant sur les pages où vous souhaitez les différentes options d'heure. xxx


2 commentaires

En fait, c'est assez élégant. Étant donné que le seul point de sous-classement consiste à remplacer le JS utilisé, votre approche est probablement probablement meilleure.


Merci, j'ai aussi aimé votre solution. Ma solution utilise moins de code, mais semble moins intentionnelle que la tienne. J'ai essayé de penser quelle solution serait plus facile à maintenir au fil du temps, notamment que Django elle-même est améliorée. J'ai aimé le vôtre parce que cela a rendu clairement clair ce qui se passait. J'ai aimé que la mine puisse être mise en œuvre sans dupliquer aucun des fichiers Django. Je ne pouvais pas vraiment comprendre quel chemin était plus responsable, alors je pensais poster la solution et laisser la foule évaluer cette approche.



1
votes

Remplacer JS par DateTimeShortCutS.overriDeTimeMentions fonctionne uniquement avec un formulaire (Bug: Le changement de temps dans le modèle enfant affecte le modèle parent, vous ne pouvez donc pas modifier Timefield dans le formulaire de modèle enfant par ce widget)

Si vous souhaitez utiliser des options de temps personnalisées avec des inlines:

/Static/admin/js/admin/dateTimeShortCutS.js Remplacer: xxx

par: xxx


0 commentaires

5
votes

J'ai essayé d'utiliser cette méthode et j'ai trouvé ce qui précède JavaScript ne fonctionnait pas lorsque plusieurs DateTime étaient présentes sur le formulaire.

Voici ce que j'ai fait.

dans ma section MODERADMIN J'ai ajouté: < / p> xxx

puis dans le fichier JS: xxx

note: je devais mettre à l'intérieur d'un document.Ready parce que j'ai trouvé que j'ai trouvé que Je ne pouvais pas contrôler où le script a été inclus dans la page (semble avoir été chargé avant les fichiers JS calendrier par défaut).


0 commentaires

1
votes

Je suis allé avec une approche beaucoup plus simple et cela a fonctionné pour moi. J'ai simplement ajouté des choix à mon modèle en utilisant le code suivant:

classe de classe (modèle): Programme = Foreigney ('Programme') Time_of_the_day = Timefield (choix = ( (DateTime.DateTime.stryptime ('7h00', "% I:% m% p"). Temps (), '7:00 AM'), (DateTime.DateTime.stryptime ('8h00', "% I:% m% p"). Temps (), '8:00 AM'), (denttime.datetime.stryptime ('9h00', "% I:% m% p"). temps (), "9h00"), (DateTime.DateTime.stryptime ('18h00', "% I:% m% p"). temps (), '18h00'), (DateTime.DateTime.stryptime ('19h00', "% I:% M% P"). Temps (), '19h00'), (DateTime.DateTime.stryptime ('20h00', "% I:% m% p"). temps (), '20:00'), (DateTime.DateTime.stryptime ('à 21h00', "% I:% m% p"). temps (), '21:00'),
))

J'espère que cela aide


3 commentaires

Es-tu sûr? J'ai reçu une erreur indiquant que choix est une option non valide pour Timefield


Travaillé pour moi en 2015, peut-être que la version actuelle ne le permet pas. Le projet avec cet extrait est toujours opérationnel.


Je dois le vérifier à nouveau au cas où j'ai orthographié quelque chose, votre idée est excellente.



4
votes

Il y a une meilleure solution. Après avoir lu DoneTimeShortCutS.js Le peut être simplifié pour: xxx

Ajoutez ce code au fichier JavaScript dans 'static // time-shortctus.js' et ajoutez Meta à votre modèle d'administration: xxx


1 commentaires

Cela a fonctionné pour moi lorsque j'ai supprimé les premières et les moindres lignes dans le code JavaScript.