设置django的admin中外键的默认值
2018-02-13 15:15
323 查看
需求背景
基于django admin开发给用户使用的界面,用户在add新的时author这一项会是一个下拉框,而我需要的是让他自动设置为当前用户,最好是不可修改和编辑的,不显示也行所以明确下我的需求就是,让django能够在点击add时自动就设置当前登陆用户为默认作者,而不需要用户选择。
第一次尝试:
通过这篇文章得知,通过给requert里传参可以设置默认值,只不过是可以编辑的。解决方案的参考代码为:def add_view(self, request, form_url='', extra_context=None): g = request.GET.copy() g['owner'] = request.user request.GET = g return super(TaskAdmin, self).add_view(request, form_url, extra_context=extra_context)
问题:
如果我不想让用户编辑作者字段,照理说可以通过下面代码进行设置:def get_readonly_fields(self, request, obj=None): """设置只读字段""" if request.user.is_superuser: return ['publish'] else: return ['publish', 'owner']
但经过实验证明,这种方式跟上面的add_view中设置的默认值有冲突,显示的还是None。
第二次尝试:
又参考了这篇,参考代码为:def formfield_for_foreignkey(self, db_field, request=None, **kwargs): """对外键进行设置""" if db_field.name == 'author': kwargs['initial'] = request.user.id return super(TaskAdmin, self).formfield_for_foreignkey( db_field, request, **kwargs )
的确可以用,效果跟上一种一样,所以也有同样的问题
最终尝试
最后终于找到了这篇文章,可以解决了。def formfield_for_foreignkey(self, db_field, request=None, **kwargs): """对外键进行设置""" if db_field.name == 'author': kwargs['initial'] = request.user.id kwargs['queryset'] = User.objects.filter(username=request.user.username) return super(TaskAdmin, self).formfield_for_foreignkey( db_field, request, **kwargs )
这样的话,默认用当前用户,并且候选框里只有当前用户,就不需要担心用户选择其他用户了。
总结
django提供了各式各样的接口,但是文档并不是特别全,所以一些用法还是要通过搜搜来搜到搜索时
4000
用中文尝试后没有好的答案时,要尽早切换到英文,把需求用英文描述下再在谷歌下搜索,这样可以有效提高效率。
相关文章推荐
- Django admin 页面中文名称加 s 去除 s 设置
- django 1.10.6 admin后台管理设置显示中文
- 如何动态设置django的model field的默认值
- 5 Django系列之通过list_display展示多对多与外键内容在admin-web界面下
- Django中admin后台管理常用设置系列之十六
- Django admin 一些有用的设置
- Django 学习笔记 - Simple Blog 1 - Django 数据库和admin设置
- django-自带admin后台如何给某些field赋默认值(比如user=request.user)然后隐藏它
- django admin 或xdmin list_display search_fields list_filter 如果显示搜索外键或多对多字段
- Django-admin后台管理系统设置中文
- Django Admin 实现外键过滤
- django学习——django admin 一些有用的设置
- DJANGO ADMIN后台设置
- 方法定义django admin中 外键下拉框添加过滤(只需要显示我所要的过滤结果)
- Django中设置admin的方法(笔记)
- django admin.py 外键,反向查询
- django1.6 admin site设置(一)
- django:在form中使用admin里面的绿色加号来更新外键,超简单
- 利用celery+django 在admin后台设置定时任务
- django admin中 外键下拉框添加过滤(只需要显示我所要的过滤结果)