zoukankan      html  css  js  c++  java
  • 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()])
    
  • 相关阅读:
    POJ-3083 Children of the Candy Corn (BFS+DFS)
    HDU-1429 胜利大逃亡(续) (BFS+状态压缩)
    【JS】408- 看一看 JavaScript 引擎是什么
    【HTTPS】407- 记住 HTTPS!
    【React】406- React Hooks异步操作二三事
    【Git】405- 分享:大牛总结的 Git 使用技巧
    【性能优化】404- 从 12.67s到1.06s 性能优化实战
    【HTTP】402- 深入理解http2.0协议,看这篇就够了!
    【Web技术】401- 在 React 中使用 Shadow DOM
    7.app和app后端的通讯
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11954044.html
Copyright © 2011-2022 走看看