`
zjxplq
  • 浏览: 40435 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

在django-admin中实现动态form

阅读更多

问题的提出:

有如下models.py:

class A(models.Model):
  user = models.ForeignKey(User)
  name = models.CharField(max_length=10)
 

现在要在django-admin管理界面下进行输入:

1)如当前用户是管理员时,admin管理界面中要出现user这一栏,可以让管理员自由选择

2)如当前用户不是管理员时,admin管理界面中不出现user这一栏,直接指定user为当前用户

现在想到使用一种方法是利用多重继承,代码如下:

class DynamicExcludeMixin(object):
    dynamic_excludes = []
    
    def preprocess_exclude(self,request):
        if not self.exclude:
            self.exclude = []
        for dynamic_exlcude in self.dynamic_excludes:
            if dynamic_exlcude not in self.exclude:
                if not request.user.is_superuser:
                    self.exclude.insert(1,dynamic_exlcude)
            else:
                if request.user.is_superuser:
                    self.exclude.remove(dynamic_exclude)
                
            
    def add_view(self, request, form_url='', extra_context=None):
        self.preprocess_exclude(request)
        return super(DynamicExcludeMixin,self).add_view(request, form_url, extra_context)
    
    def change_view(self, request, object_id, extra_context=None):
        self.preprocess_exclude(request)
        return super(DynamicExcludeMixin,self).change_view(request, object_id, extra_context)

class AAdmin(DynamicExcludeMixin,admin.ModelAdmin):
    dynamic_excludes = ['user',]
    
    def save_model(self,request,obj,form,change):
        if not change:
            if not request.user.is_superuser:
                obj.user = request.user
            
        obj.save()
 

不过这样的实现还是比较麻烦,还得再进行改进。

0
1
分享到:
评论

相关推荐

    Python库 | django-summernote-0.5.9.tar.gz

    在模型中,可以定义一个字段为`django_summernote.models.SummernoteTextField`类型,这样在admin界面中就会自动使用Summernote编辑器。在前端视图中,可以使用模板标签`{% load summernote %}` 和 `{{ form.field_...

    django-admin-search:Django管理员的模态过滤器

    安装: pip install django-admin-search用法: 在settings.py中添加到您的INSTALLED_APPS: INSTALLED_APPS = [ ... 'django_admin_search', ...]创建模型搜索表​​: from .models import Areafrom django.forms ...

    Django-2.1.2.tar.gz

    这个压缩包“Django-2.1.2.tar.gz”包含了安装Django 2.1.2所需的所有文件,便于在Python环境中进行安装和使用。 首先,我们来了解Django框架的基础知识。Django遵循模型-模板-视图(Model-Template-View,MTV)的...

    Django-2.0.4 Django-2.0.4

    6. **表单(Form)**:Django提供了强大的表单处理功能,允许开发者定义表单类,然后在视图中处理POST请求,验证数据,并将其保存到模型中。 7. **中间件(Middleware)**:中间件是Django的一种机制,它可以在请求...

    django-admin-multiselect:适用于移动设备的替代多选小部件

    3. 针对需要替换多选小部件的模型字段,在模型的`admin.py`中定义一个自定义行政类,并在`formfield_for_dbfield`或`formfield_for_choice_field`方法中指定使用`django_admin_multiselect.widgets....

    Django-1.3.1.tar.gz

    在Django中,视图通常是一个函数或类,负责获取请求数据,处理业务逻辑,并决定返回哪个模板。 3. **模板(Template)**:模板系统是Django强大的静态和动态内容生成工具。它允许开发者使用HTML模板,通过内置的...

    Django-1.9.tar.gz

    这一版本引入了`django-admin check`命令,用于在应用启动前检查潜在的问题,确保项目的健康运行。同时,它还加强了对Python 3的支持,为Python 3.5提供了全面兼容性。 在模板系统方面,Django 1.9引入了更强大的...

    django-admin-kit:Django管理套件为Django管理面板增加了更多功能。 它具有管理面板中的重复按钮,多选字段和Ajax绑定等功能

    应用名称admin_kit应该放在django settings文件中已安装应用的顶部。 # settings.py INSTALLED_APPS = [ 'admin_kit', 'django.contrib.admin', 'django.contrib.auth', ... ] 这是因为,管理工具包会覆盖...

    Python库 | django-dockit-0.0.6.tar.gz

    2. **Form和Admin集成**:Dockit与Django的表单和管理界面无缝集成,使你可以方便地创建和管理基于schema的文档。 3. **权限管理**:提供了对文档级别的访问控制,可以根据需要设置读写权限。 4. **序列化和反序列...

    Django-中文教程.pdf

    - **变量替换**:掌握如何在模板中显示动态数据。 - **标签**:学习常用的模板标签,如循环、条件判断等。 - **自定义标签**:了解如何编写自定义模板标签以满足特定需求。 **知识点8:上下文处理器** - **上下文...

    Django Admin实现三级联动的示例代码(省市区)

    在本篇文章中,我们要实现的是一个非常实际的应用场景,即在Django Admin中实现三级联动,具体到中国的省市区。三级联动是指在选择下级行政区划时,上一级行政区划的选择会影响到可选的下一级行政区划。例如,当我们...

    pythonWeb框架Django-2.1

    在表单(Form)处理上,Django 2.1提供了更好的错误处理机制,使得开发者能更方便地定位和解决用户输入验证的问题。此外,表单字段的自定义和验证更加灵活,有助于创建更具用户体验的表单。 模板系统(Template ...

    django-material:Django的材质设计

    要在Django项目中使用Django-Material,首先需要通过pip安装库: ``` pip install django-material ``` 然后在settings.py中添加到INSTALLED_APPS列表中,并配置好模板路径。接着,可以在urls.py中定义CRUD视图,...

    PyPI 官网下载 | django-fobi-0.3.2.tar.gz

    在项目中使用Fobi时,需要将其配置到Django的设置文件中,接着可以在视图或模板中使用Fobi提供的工具和函数。 总的来说,`django-fobi-0.3.2.tar.gz`是一个为Django项目提供便捷表单构建的工具,它降低了开发复杂度...

    django admin 自定义替换change页面模板的方法

    在Django admin中,每个页面都是由相应的模板文件渲染生成的。如果想要自定义页面内容,可以复制Django自带的模板文件到我们的模板目录中,并进行相应的修改。本文将详细说明如何自定义替换Django admin中的change...

    Python库 | django-tabbed-changeform-admin-0.1.5.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:django-tabbed-changeform-admin-0.1.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    django-1.3-cheetsheet

    在Django中,查询操作是与数据库交互的核心部分。下面列出了一些常用的查询操作符。 1. **`exact`, `iexact`**:用于精确匹配,其中`iexact`不区分大小写。 - 示例:`User.objects.filter(name__exact="John")` 2...

    Django-master.rar

    在Django中,主要的知识点包括: 1. **MVC(Model-View-Controller)架构**:Django遵循MTV(Model-Template-View)模式,与MVC类似,但更侧重于数据模型、模板渲染和视图处理。模型(Model)负责数据处理,模板...

    django-1.8 offical HTML

    1. **安装与设置**:首先,我们需要了解如何在系统中安装Django,包括使用pip进行管理以及配置环境变量。Django 1.8支持Python 2.7和3.2+,因此需要根据项目需求选择合适的Python版本。 2. **快速启动**:`django-...

    xadmin的富文本编辑器

    总之,`django-ueditor`为Django和Xadmin带来了强大的富文本编辑能力,通过简单的配置和集成,可以让开发者在管理界面中实现丰富的文本格式化,提升后台内容编辑的用户体验。同时,对源码的探索有助于进一步定制和...

Global site tag (gtag.js) - Google Analytics