• django--xadmin展示一对多关联信息


    xadmin:是django的一套优于admin的后台管理系统,不仅提供了可观性更高的UI界面,还封装了基于模型类的CURD,支持过滤查询,多种形式的数据导出,还有很多方便易用的小插件。
    它的缺点是,如果有一些自定义的功能,页面展示部分和权限控制部分可能需要改底层代码,不是特别方便
    我的场景是,一对多的关系表,如何以一去查多

    models.py

    class Assets(models.Model):
        subject = models.CharField(max_length=30,verbose_name="主体",choices=())
        kinds = models.CharField(max_length=25, default='领用', choices=(), verbose_name='种类')
        user = models.ForeignKey(UserProfile, default=152, verbose_name='执行人')
        close_time = models.DateTimeField(verbose_name='结束时间')
    
        def __str__(self):
            return "%s" % (self.subject)
    
        class Meta:
            verbose_name = "一表"
            verbose_name_plural = verbose_name
    class AssetsRecord(models.Model):
        info = models.ForeignKey(AssetsCheck,verbose_name='一表外键')
        num = models.CharField(max_length=30,verbose_name="编号")
        status = models.BooleanField(verbose_name='状态')
    
        def __str__(self):
            return "%s" %(self.num)
    
        class Meta:
            verbose_name = "多表"
            verbose_name_plural = verbose_name

    截图展示的是一表,想要实现点击查看详情出现它所对应的多表的信息
    在网上找了很多方法,也咨询过一些人,没有什么特别高效的方法,只能是自建templates,但是由于我本人不想抛弃当前的xadmin,因为其自带的一些方法实在是太方便了,
    于是我在想,它自带的过滤器和查询是什么原理实现的,很容易发现,url传参,那么在如何查询外键字段呢?
    ?_rel_info__id__exact=id

    其中info,是我外键的字段,这样很快就可以实现关联作用,省了好多事儿了,

    代码:

    xadmin.py

    from django.utils.safestring import mark_safe
    
    class AssetsAdmin(object):
        list_display = ['subject','kinds','user','record_button','close_time']
        search_fields = ['subject','kinds','user','close_time']
        list_filter = ['subject','kinds','user','close_time']
        #
        def record_button(self, obj):
            button = '<a class="icon fa fa-detail" style="color: violet" href="/assets/assetsrecord/?_rel_info__id__exact=%s">查看详情</a>' % obj.id
            return mark_safe(button)
    
        record_button.short_description = '<span style="color: violet">查看详情</span>'
        record_button.allow_tags = True
    xadmin.site.register(Assets,AssetsAdmin)
    
    class AssetsRecordAdmin(object):
        list_display = ['get_check_info','num','status']
        search_fields = ['num','status']
        list_filter = ['info__close_time','num','status']
    
        def get_check_info(self,obj):
            return obj.info.id
    
        get_check_info.short_description = '详情ID'
        form_layout = (
            Main(
                Fieldset("基本信息",
                         Row("info"),
                         Row("num"),
                         ),
                Fieldset("详细信息信息",
                         ),
            ),
            Side(
                Fieldset(('Status'),
                         'status'
                         ),
            )
        )
    
    
    xadmin.site.register(AssetsRecord, AssetsRecordAdmin)

    大功告成,简直不要太方便了

    from django.utils.safestring import mark_safe
  • 相关阅读:
    ASP.NET中的参数与特殊类型和特性
    ASP.NET MVC概述及第一个MVC程序
    ASP.NET系统对象
    WCF学习——WCF简介(三)
    WCF学习——构建一个简单的WCF应用(二)
    WCF学习——构建一个简单的WCF应用(一)
    注入技术--修改pe文件导入表进行注入
    内存
    I/O
    进程
  • 原文地址:https://www.cnblogs.com/lutt/p/13734902.html
Copyright © 2020-2023  润新知