Django admin: puis-je définir des champs de l'ordre?
- Je utiliser des modèles abstraits dans Django comme:
class Tree(models.Model):
parent = models.ForeignKey('self', default=None, null=True, blank=True,
related_name="%(app_label)s_%(class)s_parent")
class Meta:
abstract = True
class Genre(Tree):
title = models.CharField(max_length=150)
Et tous les champs du modèle abstrait aller d'abord dans Django du panneau d'administration:
parent:
abstract_field2:
title:
model_field2:
...
Est-il un moyen de les mettre (les champs de classes abstraites) à la fin de la liste?
Ou d'une façon plus générale pour définir l'ordre des champs?
OriginalL'auteur Sergey | 2014-10-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez commander les champs comme vous le souhaitez en utilisant les
ModelAdmin.les champs
option.L'ordre des champs dépend de l'ordre dans lequel vous les déclarer dans vos modèles. Donc, vous pouvez également commander les champs de la façon dont vous voulez pour les afficher dans l'interface d'admin.
dans la question,
parent
est à partir du modèle parentTree
, ettitle
est à partir du modèle de l'enfantGenre
, de sorte qu'il n'est pas possible de changer l'ordre dans l'admin en modifiant l'ordre dans les modèles.Suppose que cela s'applique uniquement au modèle normal situations.
OriginalL'auteur Alasdair
Je sais que c'est une vieille question, mais je voulais thow dans mes deux cents, car mon cas d'utilisation était exactement comme ça, mais j'ai eu beaucoup de modèles héritent d'une classe, n'avait pas envie d'écrire sur des champs pour chaque administrateur. Au lieu de cela, j'ai étendu le get_form modèle et réarrangé les champs pour assurer parent vient toujours à la fin des champs dans le panneau d'admin pour ajouter/changer de vue.
base_fields est un OrderedDict, donc cela s'ajoute le "parent" de la clé à la fin.
Ensuite, étendre cette administration pour toutes les classes où vous voulez parent à apparaître à la fin:
OriginalL'auteur rbennell
Construction d'rbennell de réponse, j'ai utilisé une approche légèrement différente à l'aide de la nouvelle get_fields méthode introduite dans Django 1.7. Ici, j'ai remplacé (le code serait dans la définition de la société mère ModelAdmin) et l'enlever et re-ajouté le "parent" du champ à la fin de la liste, de sorte qu'il apparaît sur le bas de l'écran. À l'aide de .insert(0,'parent') serait de le mettre sur le devant de la liste (ce qui devrait être évident si vous êtes familier avec python listes).
Cela suppose que vos champs sont une liste, pour être honnête, je ne suis pas sûr si c'est un bon hypothèse, mais il a bien fonctionné pour moi jusqu'à présent.
OriginalL'auteur thrillhouse