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()])
    
  • 相关阅读:
    python动态规划解决矩阵连乘
    ISCC2019-digdigdig
    MultiSelectComboBox(一)
    中国地图 xaml Canvas
    NotificationObject.cs
    DelegateCommand.cs
    SQL-PIVOT 数据透视 行列转换
    中国行政区域(省,市,县)SQL
    WCF自定义地址路由映射(不用svc文件)
    java下载安装,环境变量,hello world
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11954044.html
Copyright © 2011-2022 走看看