Django中多表關聯的展現問題:

增長一個知識點,當表中有多對多關聯時,在前端展現的時候是一個列表,因此在展現的時候須要這樣作;css

表結構:html

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文件裏寫一個方法,將這個對象獲取寫一個列表推導式python

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()])
相關文章
相關標籤/搜索