• Django中多表关联的展示问题:


    增加一个知识点,当表中有多对多关联时,在前端展示的时候是一个列表,所以在展示的时候需要这样做;

    表结构:

    class ProjectEnv(models.Model):
        project = models.ForeignKey(verbose_name='项目', to='Project')
        env_choices = (
            (1, '测试'),
            (2, '正式')
        )
        env = models.IntegerField(verbose_name='环境', choices=env_choices)
        path = models.CharField(verbose_name='线上部署路径', max_length=128)
        servers = models.ManyToManyField(verbose_name='服务器', to='Server')
    
    

    前端页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    
    
    <h1 class="container">环境展示</h1>
    
    
    <div class="container">
    
        <form action="" method="post">
            {% csrf_token %}
        <a href="{% url 'web:addprojectenv' %}" class="btn btn-success">添加数据</a>
            <table class="table table-hover">
                <thead>
                <tr>
                    <td>序号</td>
                    <td>项目</td>
                    <td>环境</td>
                    <td>线上部署路径</td>
                    <td>服务器</td>
                    <td>操作</td>
                </tr>
                </thead>
                <tbody>
                {% for d in data %}
                    <tr>
                        <td>{{ forloop.counter }}</td>
                        <td>{{ d.project.title }}</td>
                        <td>{{ d.env }}</td>
                        <td>{{ d.path }}</td>
                        <td>
                            <---->d.servers.values点出来的是一个queryset类型是一个列表,所以循环这个列表,然后获取每一个字典的值就行</---->
                            {% for datum in  d.servers.values  %}
                                    {{ datum.hostname }}
                            {% endfor %}
                        </td>
                        <td>
                            <a href="{% url 'web:editprojectenv' d.id %}" class="btn btn-info">编辑</a>
                            <a href="{% url 'web:deleteprojectenv' d.id %}" class="btn btn-danger">删除</a>
                        </td>
                    </tr>
                {% endfor %}
    
    
                </tbody>
            </table>
        </form>
    
    </div>
    
    </body>
    </html>
    

    还有一个方法就是在models文件里写一个方法,将这个对象获取写一个列表推导式

    class ProjectEnv(models.Model):
        project = models.ForeignKey(verbose_name='项目', to='Project')
        env_choices = (
            (1, '测试'),
            (2, '正式')
        )
        env = models.IntegerField(verbose_name='环境', choices=env_choices)
        path = models.CharField(verbose_name='线上部署路径', max_length=128)
        servers = models.ManyToManyField(verbose_name='服务器', to='Server')
    
        def get_hostname(self):
            return ','.join([i["hostname"] for i in self.servers.values()])
    
  • 相关阅读:
    Requests 库
    Mac下终端配置(item2 + oh-my-zsh + solarized配色方案)
    中文名文件上传到linux服务器上以后文件名会乱码(openoffice)
    scp
    请求https前缀的网站验证SSL证书的解决方案之一
    jupyter notebook更换主题 步骤详解。
    jupyter nbextensions的 安装
    装饰器的学习 高级版-- 语法糖参数
    装饰器的学习 初级版-- 高阶函数,嵌套函数,闭包
    Python数据可视化的完整版操作指南(建议收藏)
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11954044.html
Copyright © 2020-2023  润新知