web-dev-qa-db-fra.com

Comment ajouter inline en ligne sur Django admin

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?

33
Hassek

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.

49
Hassek

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
25
Keval Prabhu

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**
2
Muhammad Hafid

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

0
tamarabyte