115 votes

Django admin: Comment afficher un champ marqué editable = 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, il cache complètement le champ. Comment cela peut-il être réalisé?

221voto

tback Points 3282

Utilisez les champs en lecture seule . Comme si (pour django> = 1.2):

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

18voto

Manoj Govindan Points 24030

Mise à jour

Cette solution est utile si vous souhaitez conserver le champ modifiable dans l'Admin, mais non modifiable partout ailleurs. Si vous voulez garder le champ non modifiable tout au long de puis @Jusqu'à Backhaus' réponse est la meilleure option.

Réponse Originale À Cette Question

Une façon de le faire serait d'utiliser une coutume ModelForm dans l'admin. Ce formulaire peut remplacer le champ nécessaire pour le rendre modifiable. Vous pouvez ainsi conserver editable=False partout ailleurs, mais 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)

0voto

alzclarke Points 803

Une autre façon est form.instance. nom de domaine

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X