首页 > 其他 > 详细

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

时间:2020-09-26 17:59:57      阅读:189      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:https://www.cnblogs.com/lutt/p/13734902.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!