代码之家  ›  专栏  ›  技术社区  ›  Dicky Raambo

数组的详细视图上的Django ListData

  •  1
  • Dicky Raambo  · 技术社区  · 6 年前

    这是我的 models.py

    class Absent(models.Model):
        ...
        ListOfDate = models.TextField(blank=True, null=True, default='Nothing')
        ...
    

    就我而言 ListOfDate 数据如下:

    [datetime.date(2018, 4, 18), 
     datetime.date(2018, 5, 15), 
     datetime.date(2018, 5, 16), 
     datetime.date(2018, 5, 17)]
    

    我用 ListOfDate.append(value) 填充 ListOfData .

    这是我的 views.py

    class Attend(DetailView):
        context_object_name = 'attends'
        model = models.Attend
    

    ListView 常用

      {% for attend in attends %}
        <td>{{ attends.ListOfDate }}</td>
      {% endfor %}
    

    用于显示数据列表。但它将全部放在一列中。这样地:

    [日期时间.日期(2018,4,18),
    日期:日期(2018年5月15日)
    日期:日期(2018年5月16日)
    日期:日期(2018年5月17日)]
    

    在我的情况下,我想列出 日期列表 和上面一样,但不是一列。这样地:

    +-----+--------------------------------+
    | #   | Date                           |
    +-----+--------------------------------+
    | 1   | [datetime.date(2018, 4, 18),   |  
    |     |  datetime.date(2018, 5, 15),   |
    |     |  datetime.date(2018, 5, 16),   |
    |     |  datetime.date(2018, 5, 17)]   |
    +-----+--------------------------------+
    
               |
               |
               v
    
    +-----+----------------+
    | #   | Date           |
    +-----+----------------+
    | 1   | 2018-4-18      |
    +-----+----------------+
    | 2   | 2018-5-15      |
    +-----+----------------+
    | 3   | 2018-5-16      |
    +-----+----------------+
    | 4   | 2018-5-17      |
    +-----+----------------+
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   willeM_ Van Onsem    6 年前

    TextField S CharField s,通常只用于存储, 文本。是的,有一些特殊的子类要存储,例如JSON对象和IP地址,但通常这只是一个好主意,如果您不必这样做的话。 滤波器 在这些对象的子部分上,或者不必将它们视为单独的子元素。JSON字段也不错,特别是因为它们引入了一个难以在(关系)数据库中表示的动态,但是应该小心地在 关系型 数据库。

    这里基本上有两个实体: Absent 和一个 AbsentDate 还有一个 一对多 关系 缺席的 缺席日期 . 我们可以用 ForeignKey :

    class Absent(models.Model):
        # ...
        pass
    
    class AbsentDate(models.Model):
        absent = models.ForeignKey(Absent)
        date = models.DateField()
    
        class Meta:
            ordering = ['date']

    这意味着我们已经构建了如下的东西:

    +--------+ 1   N +------------+
    | Absent |-------| AbsentDate |
    +--------+       +------------+
                     | date       |
                     +------------+
    

    我们可以确定 缺席的 实例,查询相关的 缺席日期 S与:

    our_absent_instance.absentdate_set.all()
    

    所以我们可以在如下模板中使用它:

    {% for attend in attends %}
      <td>
      {% for attenddate in attend.absentdate_set.all %}
          {{ attends.attenddate.date }}
      {% endfor %}
      </td>
    {% endfor %}