添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐

我在django后台,页面新增或者修改记录时,会输入数据到指定的model里,当前系统有2个用户角色。现在我只需要显示系统角色为教师的用户,重写 admin下的 render_change_form()方法,改写获取本Model下的外键逻辑。
在这里插入图片描述

model 里定义了两个角色, 分别是家长和老师,用role字段表示,如下:

class SysUser(TimestampModel):
    name = models.CharField(verbose_name='用户昵称', max_length=Constant.db_name_length, null=True, blank=True)
    mail = models.CharField(verbose_name='邮箱', max_length=Constant.db_name_length, null=True, blank=True)
    gender = models.IntegerField(verbose_name='性别', choices=GENDER_TYPE, null=True, blank=True)
    age = models.IntegerField(verbose_name='年龄', null=True, blank=True)
    role = models.IntegerField(verbose_name="角色", choices=USER_ROLE, default=-1)
    last_name = models.CharField(verbose_name="姓名", max_length=Constant.db_name_length, null=True, blank=True)
    birthday = models.CharField(verbose_name="生日", max_length=Constant.db_name_length, null=True, blank=True)
    class Meta:
        verbose_name = '系统用户信息'
        verbose_name_plural = '系统用户信息'
        db_table = "sys_user"
    def __str__(self):
        return str(self.id) + "-" + self.name

然后我在后台通过外键查询,会获取到默认的所有用户,即包含了家长,又包含了教师,如下:
在这里插入图片描述

定义的孩子的家长映射关系:

class ParentChild(TimestampModel):
    parent = models.ForeignKey(SysUser, verbose_name="家长", to_field="id", related_name="parent_child_parent_id",
                               on_delete=models.DO_NOTHING)
    relation = models.IntegerField(verbose_name="关系", choices=PARENT_CHILD_RELATION, default=0)
    child = models.ForeignKey(Student, verbose_name="孩子", to_field="id", related_name="parent_child_id",
                              on_delete=models.DO_NOTHING)
    class Meta:
        verbose_name = '家长孩子映射'
        verbose_name_plural = '家长孩子映射'
        db_table = "parent_child_mapping"

接下来我们可以通过重写 render_change_form()方法,将 ParentChild的外键 parent 的获取逻辑改写,添加筛选条件,即可满足当前需求!

class ParentChildAdmin(CommonAdmin):
    verbose_name = "家长孩子"
    list_display = ('parent', 'relation', 'child',)
    # 重写parent,只取角色为家长的。
    def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
        if not request.user.is_superuser:
            p = SysUser.objects.filter(role=0)
            context['adminform'].form.fields['parent'].queryset = p
        return super(ParentChildAdmin, self).render_change_form(request, context, add, change, form_url, obj)
ParentChildAdmin(model=ParentChild, admin_site=admin.site)
                      我在django后台,页面新增或者修改记录时,会输入数据到指定的model里,当前系统有2个用户角色。现在我只需要显示系统角色为教师的用户,重写 admin下的 render_change_form()方法,改写获取本Model下的外键逻辑。model:class SysUser(TimestampModel):    name = models.CharField(verbose_name='用户昵称', max_length=Constant.db_name_length, null=Tru
class OrderAdmin(admin.ModelAdmin):
  list_display = (
    '_nick_name', 'time_order', 'year', 'item', 'status', 'number',
    'money', 'deduction_point', 'deduction_account', 'pay',
    '_open_id', 'out_trade_no', )
  search_fields = [
    'user__nick_name', 'user__wechatuser__open_id',
创建应用 python manage.py startapp stu
配置数据库(如果不加配置,则默认为django自带的数据库,db.sqlite3,这不影响后面操作)
from django.db import models
# Create your models here.
class Clazz(models.Model):
    cname=mo...
				
1.django从2.0开始ForeignKey中的on_delete参数是必须的。 on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为 on_delete=models.CASCADE, # 删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做 on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError django 1.8.4 错误内容:related Field has invalid lookup: icontains 我原来默认认为在处理外键搜索的时候,django会自动将该外键的行数据以str()化之后进行搜索,但其实并不是这样的,如果将外键加入到搜索域中,需要明确写出来。 这个是我从网上查到的解决方案,测试可用,如下: models.py
Django 2.1.7 Admin管理后台文章 Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段 Django 2.1.7 Admin - 列表页选项 Django 2.1.7 Admin - 编辑页选项 https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial07/
在写项目的过程中我们不可避免的会使用到外键这个东西,那么Django中是怎样来使用外键的呢? 了解外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。MySQL数据库默认使用的也是InnoDB引擎。 使用外键 新建一个项目,创建一个article的app,添加至sett...
➜ python Python 3.6.3 |Anaconda custom (x86_64)| (default, Oct 6 2017, 12:04:38) [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin Type "help", "copyright", "cr
1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册的app名、表名(kind_admin_index.html 页面1) 1.5 展示表中各条数据(display_table_obj.html 页面2) 1.6 添加数...
今天在设置django的搜索框搜索条件时,外键的不能直接像字符串类型那样直接写search_field中,但是我又想让他通过外键关联的数据条件搜索, 参考http://www.voidcn.com/article/p-gsdvpisv-bau.html 可以设置按照所关联的数据中某个字段搜索,比如我有两个表,一个收藏记录表(Collect),一个用户表(Userprofile),我想让人能够通...