增長一個知識點,當表中有多對多關聯時,在前端展現的時候是一個列表,因此在展現的時候須要這樣作;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()])