9
votes

Champs de réorganisation dans le modèle Django

Je veux ajouter peu de champs à chaque modèle de mon application Django. Cette fois, il est créé_at , mise à jour_at et notes . Le code de duplication pour tous les plus de 20 modèles semble stupide. J'ai donc décidé d'utiliser une classe de base abstraite qui ajouterait ces champs. Le problème est que les champs hérités de la classe de base abstraite sont d'abord dans la liste de terrain dans Admin. Déclaring Ordonnance de champ pour chaque classe ModelAdmin n'est pas une option, c'est encore plus de code en double qu'avec la déclaration de champ manuelle.

Dans ma solution finale, j'ai modifié le constructeur de modèle pour réorganiser les champs de la nouvelle instance: < Pré> xxx

Ça fonctionne comme prévu, mais je me demande, y a-t-il un meilleur moyen de faire monter mon objectif?


0 commentaires

3 Réponses :


5
votes

Si vous avez principalement besoin de la commande pour l'administrateur de Django, vous pouvez également créer votre classe «générique» -Admin via la classe d'administration de Django sous-classée. Voir http://docs.djangoproject.com/ EN / DEV / INTRO / TUTORIAL02 / # Personnaliser-the-admin-forme pour personnaliser l'affichage des champs dans l'administrateur. Vous pouvez écraser le __ init __ pour configurer les champs / champs de configuration de la création de l'instance d'administration comme vous le souhaitez. Par exemple. Vous pouvez faire quelque chose comme: XXX

En plus que je pense que ce n'est pas une bonne pratique de modifier le (privé) _field_name_cache !


0 commentaires

7
votes

J'avais le même problème, mais j'ai trouvé que ces solutions sont problématiques, alors voici ce que j'ai fait: xxx

changer de champique dans l'administrateur a plus de sens pour moi, mais changer les champs du modèle.


0 commentaires

1
votes

Je n'ai pas non plus aimé les autres solutions, donc je viens de modifier directement les fichiers de migrations.

Chaque fois que vous créez une nouvelle table dans les modèles.py, vous devrez exécuter "Python Manage.py Makemigrations" (je crois cela à Django> = V1.7.5). Une fois que vous faites cela, ouvrez le fichier de migrations nouvellement créé dans votre répertoire_app_path / migrations / et déplacez simplement les lignes dans la commande de votre choix. Puis exécutez "python greas.py migrate". Voilà! En entrant dans "Python Manage.py dbshell", vous pouvez voir que l'ordre des colonnes est exactement ce que vous les avez voulu!

inconvénient à cette méthode: vous devez le faire manuellement pour chaque table que vous créez, mais heureusement, les frais généraux sont minimes. Et cela ne peut être fait que lorsque vous créez une nouvelle table, de ne pas modifier un existant.


0 commentaires