web-dev-qa-db-fra.com

Django admin: comment afficher un champ marqué comme modifiable = False 'dans le modèle?

Même si un champ est marqué comme 'editable=False' dans le modèle, j'aimerais que la page d'administration l'affiche. Actuellement, cela masque complètement le champ .. Comment y parvenir?

87
GabiMe

Utilisez Champs en lecture seule . Comme ça (pour Django> = 1.2):

class MyModelAdmin(admin.ModelAdmin):
    readonly_fields=('first',)
178
tback

Mise à jour

Cette solution est utile si vous souhaitez conserver le champ modifiable dans Admin mais non modifiable partout ailleurs. Si vous voulez garder le champ non modifiable partout alors @Till Backhaus ' réponse est la meilleure option.

Réponse originale

Une façon de le faire serait d'utiliser un ModelForm personnalisé dans admin. Ce formulaire peut remplacer le champ requis pour le rendre modifiable. Vous conservez ainsi editable=False partout ailleurs, sauf Admin. Par exemple (testé avec Django 1.2.3)

# models.py
class FooModel(models.Model):
    first = models.CharField(max_length = 255, editable = False)
    second  = models.CharField(max_length = 255)

    def __unicode__(self):
        return "{0} {1}".format(self.first, self.second)

# admin.py
class CustomFooForm(forms.ModelForm):
    first = forms.CharField()

    class Meta:
        model = FooModel
        fields = ('second',)

class FooAdmin(admin.ModelAdmin):
    form = CustomFooForm

admin.site.register(FooModel, FooAdmin)
16
Manoj Govindan

Vos champs en lecture seule doivent également être dans des champs:

fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')
0
gabriel