【问题标题】:Django: how to model a rectangle?Django:如何为矩形建模?
【发布时间】:2016-08-12 09:53:27
【问题描述】:

我正在尝试使用 Django 为后端和 React 为前端绘制一个矩形。一些第三方将使用 JSON 格式的 4 个坐标点 (x,y) 访问我的 API,然后我通过 React 画线。我应该保留一个名为 Rectangle 的模型,其中包含 8 个字段 {(x1,y1),(x2,y2),(x3,y3),(x4,y4)} 还是应该保留 2 个模型,例如:

class Rectangle(models.Model):
   name = models.CharField(max_length=10)
   def __str__(self):
      return self.name

class Point(models.Model):
   rectangle = models.ForeignKey(Rectangle, on_delete = models.CASCADE)
   x1 = models.FloatField()
   y1 = models.FloatField()
   def __str__(self):
      return '{} , {}'.format(self.x1, self.y1, self.x2, self.y2)

如果我保留 2 个模型,那么编写序列化程序和基于类的视图来处理提供的数据会有点复杂。我应该怎么办?有什么建议吗?

【问题讨论】:

  • 如果您确定模型总是有 4 个点 — 我建议使用一个模型,包含 4 个点坐标。点模型通过 FK 连接到形状模型的方式也很酷,因为您可以轻松获得所需的点数。
  • 你会以某种方式索引点数据吗?或者做任何空间查询?如果没有,一切都可以简单地存储为 JSON 数据。恕我直言,将点存储到单个表是一种开销。
  • 感谢您的建议..

标签: python django django-models django-rest-framework


【解决方案1】:

我绝对会推荐使用一种简单的模型。如果您不构建新的矩形引擎或复杂的东西,那就足够了。

正如@BasicWolf 在评论中已经说过的那样,您甚至可以将点放在一个字段中作为 JSON,或更简单的逗号分隔(前提是您永远不需要查询点)。然后在检索点时,只需使用 split 提取对并通过 API 返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多