How to add readonly inline on django admin

前端 未结 4 1018
被撕碎了的回忆
被撕碎了的回忆 2021-02-01 13:01

I am using django 1.4 and I have a many2many field, so when creating the admin site I wanted to add this field as an inline, here is some code:

class SummaryInli         


        
相关标签:
4条回答
  • 2021-02-01 13:38

    Thanks 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**
    
    0 讨论(0)
  • 2021-02-01 14:02

    You can make the entire inline readonly by adding:

    class UnitsInline(admin.TabularInline):
    
        def has_change_permission(self, request, obj=None):
            return False
    

    This will prevent anyone from editing the entry from the admin.

    Another example that prevents, adding, deletion and displays all the inline fields as readonly:

    class ReadOnlyInline(admin.TabularInline):
        def has_change_permission(self, request, obj=None):
            return False
    
        def has_add_permission(self, request, obj=None):
            return False
    
        def has_delete_permission(self, request, obj=None):
            return False
    
        def get_readonly_fields(self, request, obj=None):
            return list(super().get_fields(request, obj))
    
    0 讨论(0)
  • 2021-02-01 14:05

    After a while of trying to find the name I figured out thanks to this answer, so I checked the names at self.opts.local_fields and found the name of the middle table and added it to readonly_fields, setting can_delete to False.

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

    pretty simple but took me a while so I figured out it was a good idea to add it here.

    0 讨论(0)
  • 2021-02-01 14:05

    Additionally, if you do not want the ability to add/delete the rows, you can add these definitions.

    def has_add_permission(self, request, obj=None):
        return False
    
    def has_delete_permission(self, request, obj=None):
        return False
    
    0 讨论(0)
提交回复
热议问题