J'utilise Django 1.4 et j'ai un champ many2many, donc lors de la création du site admin, je voulais ajouter ce champ en tant que ligne, voici du code:
class SummaryInline(admin.TabularInline):
model = ParserError.summaries.through
class MyClassAdmin(admin.ModelAdmin):
list_display = ('classifier', 'name', 'err_count', 'supported')
fields = ('classifier', 'name', 'err_count', 'err_classifier', 'supported')
inlines = (SummaryInline,)
readonly_fields = ('classifier', 'err_count')
Ma question est donc la suivante: comment créer un champ en ligne en lecture seule?
Après un moment d’essai pour trouver le nom, j’ai trouvé grâce à cette réponse , j’ai donc vérifié les noms à self.opts.local_fields
, trouvé le nom de la table du milieu et l’ajouté à readonly_fields
, réglage can_delete
à False.
class SummaryInline(admin.TabularInline):
model = ParserError.summaries.through
readonly_fields = ('myclasssummary',)
can_delete = False
assez simple, mais cela m’a pris un certain temps, j’ai donc pensé que c’était une bonne idée de l’ajouter ici.
De plus, si vous ne souhaitez pas pouvoir ajouter/supprimer les lignes, vous pouvez ajouter ces définitions.
def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
Merci Keval Prabhu
class UnitsInline(admin.TabularInline):
model = Units
extra = 0
verbose_name = 'Units'
verbose_name_plural = 'Units of company'
**def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False**
Vous pouvez faire la ligne entière en lecture seule en ajoutant:
class UnitsInline(admin.TabularInline):
def has_change_permission(self, request, obj=None):
return False
Cela empêchera quiconque de modifier l'entrée de l'administrateur