问题的提出:
有如下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()
不过这样的实现还是比较麻烦,还得再进行改进。
分享到:
相关推荐
在模型中,可以定义一个字段为`django_summernote.models.SummernoteTextField`类型,这样在admin界面中就会自动使用Summernote编辑器。在前端视图中,可以使用模板标签`{% load summernote %}` 和 `{{ form.field_...
安装: 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所需的所有文件,便于在Python环境中进行安装和使用。 首先,我们来了解Django框架的基础知识。Django遵循模型-模板-视图(Model-Template-View,MTV)的...
6. **表单(Form)**:Django提供了强大的表单处理功能,允许开发者定义表单类,然后在视图中处理POST请求,验证数据,并将其保存到模型中。 7. **中间件(Middleware)**:中间件是Django的一种机制,它可以在请求...
3. 针对需要替换多选小部件的模型字段,在模型的`admin.py`中定义一个自定义行政类,并在`formfield_for_dbfield`或`formfield_for_choice_field`方法中指定使用`django_admin_multiselect.widgets....
在Django中,视图通常是一个函数或类,负责获取请求数据,处理业务逻辑,并决定返回哪个模板。 3. **模板(Template)**:模板系统是Django强大的静态和动态内容生成工具。它允许开发者使用HTML模板,通过内置的...
这一版本引入了`django-admin check`命令,用于在应用启动前检查潜在的问题,确保项目的健康运行。同时,它还加强了对Python 3的支持,为Python 3.5提供了全面兼容性。 在模板系统方面,Django 1.9引入了更强大的...
应用名称admin_kit应该放在django settings文件中已安装应用的顶部。 # settings.py INSTALLED_APPS = [ 'admin_kit', 'django.contrib.admin', 'django.contrib.auth', ... ] 这是因为,管理工具包会覆盖...
2. **Form和Admin集成**:Dockit与Django的表单和管理界面无缝集成,使你可以方便地创建和管理基于schema的文档。 3. **权限管理**:提供了对文档级别的访问控制,可以根据需要设置读写权限。 4. **序列化和反序列...
- **变量替换**:掌握如何在模板中显示动态数据。 - **标签**:学习常用的模板标签,如循环、条件判断等。 - **自定义标签**:了解如何编写自定义模板标签以满足特定需求。 **知识点8:上下文处理器** - **上下文...
在本篇文章中,我们要实现的是一个非常实际的应用场景,即在Django Admin中实现三级联动,具体到中国的省市区。三级联动是指在选择下级行政区划时,上一级行政区划的选择会影响到可选的下一级行政区划。例如,当我们...
在表单(Form)处理上,Django 2.1提供了更好的错误处理机制,使得开发者能更方便地定位和解决用户输入验证的问题。此外,表单字段的自定义和验证更加灵活,有助于创建更具用户体验的表单。 模板系统(Template ...
要在Django项目中使用Django-Material,首先需要通过pip安装库: ``` pip install django-material ``` 然后在settings.py中添加到INSTALLED_APPS列表中,并配置好模板路径。接着,可以在urls.py中定义CRUD视图,...
在项目中使用Fobi时,需要将其配置到Django的设置文件中,接着可以在视图或模板中使用Fobi提供的工具和函数。 总的来说,`django-fobi-0.3.2.tar.gz`是一个为Django项目提供便捷表单构建的工具,它降低了开发复杂度...
在Django admin中,每个页面都是由相应的模板文件渲染生成的。如果想要自定义页面内容,可以复制Django自带的模板文件到我们的模板目录中,并进行相应的修改。本文将详细说明如何自定义替换Django admin中的change...
资源分类:Python库 所属语言:Python 资源全名:django-tabbed-changeform-admin-0.1.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
在Django中,查询操作是与数据库交互的核心部分。下面列出了一些常用的查询操作符。 1. **`exact`, `iexact`**:用于精确匹配,其中`iexact`不区分大小写。 - 示例:`User.objects.filter(name__exact="John")` 2...
在Django中,主要的知识点包括: 1. **MVC(Model-View-Controller)架构**:Django遵循MTV(Model-Template-View)模式,与MVC类似,但更侧重于数据模型、模板渲染和视图处理。模型(Model)负责数据处理,模板...
1. **安装与设置**:首先,我们需要了解如何在系统中安装Django,包括使用pip进行管理以及配置环境变量。Django 1.8支持Python 2.7和3.2+,因此需要根据项目需求选择合适的Python版本。 2. **快速启动**:`django-...
总之,`django-ueditor`为Django和Xadmin带来了强大的富文本编辑能力,通过简单的配置和集成,可以让开发者在管理界面中实现丰富的文本格式化,提升后台内容编辑的用户体验。同时,对源码的探索有助于进一步定制和...