zoukankan      html  css  js  c++  java
  • 关于Django Admin中inlines等类型的问题

    关于Django Admin中inlines等类型的问题

    工作中遇到一个问题,需要让一个表中的每一条记录不可修改,但是可以增加。发现使用readonly_fields字段可以让字段不可修改,但是新增的时候也不能新增了(需要填写的字段全部变成了空白,没有了输入框),在网上苦苦搜寻,终于找到了相关的问题,记录一下,防止以后再遇到此类问题。

    关于两种Inline类

    • TabularInline: 这个主要是横向的以表格的形式展示/添加数据
    • StackedInline: 这个主要是纵向的形式展示/添加数据

    解决方案

    摘录了问题中的描述,添加一些文档:

    class NoteListInline(admin.TabularInline):
        model = Note
        verbose_name = _('Note')
        verbose_name_plural = _('Notes')
        extra = 0
        can_delete = False  # 不允许删除
        # 定义展示的字段和顺序
        fields = (
            'note',
            'created_at'
        )
        # 只读的字段
        readonly_fields = (
            'note',
            'created_at'
        )
    
        def has_add_permission(self, request, obj=None):
            """
            不允许这个inline类增加记录
            (当然也增加不了,readonly_fileds中定义的字段,在增加时无法输入内容)
            """
            return False
    
    class NoteAddInline(admin.StackedInline):
        model = Note
        verbose_name = _('Note')
        verbose_name_plural = _('Notes')
        extra = 1
        # 可以定义允许添加的字段
        # fields = ('note',)
        can_delete = False
    
        def get_queryset(self, request):
            """
            重写这个方法
            不显示任何的Note模型的记录,这个类就只允许添加相关的数据,不是用来展示数据的
            """
            queryset = super().get_queryset(request)
            return queryset.none()  # no existing records will appear
    
    @admin.register(MyModel)
    class MyModelAdmin(admin.ModelAdmin):
        # ...
        # 在这里需要引入这两个类,一个用作展示,一个用作添加数据
        inlines = (
            NoteListInline,
            NoteAddInline,
        )
        # ...
    
  • 相关阅读:
    选择
    git使用笔记
    “子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”SQL查询错误解析
    sql学习笔记
    python爬虫
    线性代数知识点
    centos7 安装git
    感知机——学习笔记
    Logistic Regression学习笔记
    朴素贝叶斯分类--笔记
  • 原文地址:https://www.cnblogs.com/zzhaolei/p/13162343.html
Copyright © 2011-2022 走看看