web-dev-qa-db-fra.com

Champ caché dans Django modèle

Un moment de retour, j'ai fait une classe modèle. J'ai fait plusieurs modelormes pour cela et cela a fonctionné magnifiquement.

J'ai récemment dû ajouter un autre champ optionnel (vierge = true, null = vrai) afin que nous puissions stocker certaines données de relation entre les utilisateurs. C'est essentiellement un système de référence.

Le problème est d'ajouter que ce nouveau champ a signifié que le champ de référence apparaît là où je n'ai pas changé les modelforms pour l'exclure. Normalement, cela signifierait seulement 10 minutes supplémentaires et les excluant, mais dans ce cas, en raison de la politique de gestion de projet hors de mon contrôle, je n'ai aucun contrôle sur les modèles pour cette application.

Puis-je soit:

  • Définir le champ pour exclure automatiquement?
  • Définissez-le afin qu'il rend comme un caché (acceptable si pas parfait)?
29
Oli

de la DOCS sur en utilisant un sous-ensemble de champs sur le formulaire :

Définir modifitable = False sur le champ modèle. En conséquence, tout formulaire créé à partir du modèle via Modelform n'inclut pas ce champ.

49
Ofri Raviv

Vous pouvez définir une sous-classe de champ de modèle personnalisée et remplacer la méthode formfield() pour renvoyer un champ avec un widget Hideninput. Voir la documentation des champs personnalisés .

4
Daniel Roseman

Bien que vous ayez mentionné que vous ne pouvez pas utiliser l'exclusion dans votre cas, je pense que les autres qui rencontrent cette réponse (comme moi-même, sur la base du titre) peuvent le trouver utiles.

Il est possible de masquer sélectivement les champs à l'aide de exclude dans modeladmin, voici un extrait de quelque chose que je travaille sur:

class ItemsAdmin(admin.ModelAdmin):
    form = ItemsForm
    actions = None
    list_display = ('item_id', 'item_type', 'item_title', 'item_size', 'item_color',)
    search_fields = ('item_id', 'item_title',)
    inlines = [ImageInline,]
    readonly_fields = ('disable_add_date','disable_remove_date',)
    exclude = ('add_date', 'remove_date',)
    ###.............
1
triforcelink