2013-06-14 20 views
24

Tôi đang sử dụng django 1.4 và tôi có một trường many2many, vì vậy khi tạo site admin tôi muốn thêm lĩnh vực này như một nội tuyến, đây là một số mã:Làm thế nào để thêm inline readonly trên django quản trị

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

Vì vậy, câu hỏi của tôi là, làm thế nào tôi có thể làm cho trường nội tuyến chỉ đọc?

Trả lời

37

Sau một thời gian cố gắng tìm tên tôi đã tìm ra nhờ this answer, vì vậy tôi đã kiểm tra các tên tại self.opts.local_fields và thấy tên của bảng giữa và thêm nó vào readonly_fields, thiết can_delete False.

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

khá đơn giản nhưng đã mất một thời gian vì vậy tôi đã tìm ra ý tưởng hay là thêm nó vào đây.

+1

vẻ khá rõ ràng khi nhìn lại. Cảm ơn! –

18

Ngoài ra, nếu bạn không muốn thêm/xóa các hàng, bạn có thể thêm các định nghĩa này.

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

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

Cảm ơn 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** 
Các vấn đề liên quan