Django : comment changer un label de fieldset dynamiquement
Voici ma classe :
class GameAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': (('name', 'number_of_players'), )
}),
(_(u'Validity'), {
'classes': ('collapse',),
'fields': ('date_v_debut', 'date_v_fin')
}),
)
inlines = (GamePersonsInline,)
Mon problème est que je voulais changer dynamiquement 'Validity'
afin de montrer soit, si le jeu n’était plus valide, soit s’il était toujours en cours.
L’idée est que s’il a une date de fin de validité, c’est que le jeu n’est plus en cours.
Voici la solution complète, extrêmement simple, et qui me permet sans avoir à déplier le groupe « dates de validité », de voir si la partie n’est plus en cours :
class GameAdmin(admin.ModelAdmin):
def get_fieldsets(self, request, obj=None):
fieldsets = super(GameAdmin, self).get_fieldsets(
request, obj)
retour = [list(x) for x in fieldsets]
if obj.date_v_fin:
retour[1][0] = _(u'Expired: {}').format(
obj.date_v_fin.strftime('%Y-%m-%d %H:%M:%S'))
else:
retour[1][0] = _(u'Running!')
return retour
fieldsets = (
(None, {
'fields': (('name', 'number_of_players'), )
}),
(_(u'Validity'), {
'classes': ('collapse',),
'fields': ('date_v_debut', 'date_v_fin')
}),
)
Après c’est vrai, il y a une chose de codée en dur, le [1][0]
, mais je ne voyais pas d’autre solution.