2013-06-14 6 views
24

Sto usando Django 1.4 e ho un campo many2many, così quando si crea l'amministratore del sito ho voluto aggiungere questo campo come un inline, Ecco il codice:Come aggiungere linea di sola lettura su Django Admin

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') 

Quindi la mia domanda è, come posso rendere il campo inline di sola lettura?

risposta

37

Dopo un po 'di cercare di trovare il nome che ho capito grazie a this answer, così ho controllato i nomi a self.opts.local_fields e ho trovato il nome della tabella di mezzo e ha aggiunto a readonly_fields, impostando can_delete False.

class SummaryInline(admin.TabularInline): 
    model = ParserError.summaries.through 
    readonly_fields = ('myclasssummary',) 
    can_delete = False 

piuttosto semplice ma mi ha preso un po 'così ho capito che era una buona idea per aggiungerlo qui.

+1

sembra abbastanza ovvio in retrospettiva. Grazie! –

18

Inoltre, se non si desidera aggiungere/eliminare le righe, è possibile aggiungere queste definizioni.

def has_add_permission(self, request, obj=None): 
    return False 

def has_delete_permission(self, request, obj=None): 
    return False 
1

Grazie 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**