2013-06-14 15 views
24

Używam Django 1.4 i mam pole many2many, więc podczas tworzenia strony administratora chciałem dodać to pole jako inline, tu jest jakiś kod:Jak dodać readonly inline na django admin w

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

Moje pytanie brzmi: w jaki sposób mogę wstawić pole tylko do odczytu?

Odpowiedz

37

Po chwili próbuje znaleźć nazwę zorientowali się dzięki this answer, więc sprawdziłem nazwiska na self.opts.local_fields i znaleźć nazwę środkowym stole i dodaje go do readonly_fields ustawienie can_delete False.

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

Bardzo prosta, ale zabrała mi trochę czasu, więc wymyśliłem, że warto ją tutaj dodać.

+1

wydaje się dość oczywiste z perspektywy czasu. Dzięki! –

18

Dodatkowo, jeśli nie chcesz dodawać/usuwać wierszy, możesz dodać te definicje.

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

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

Dzięki 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**