0

我有一个Chart由多个模型组成的Box模型(所以Box有一个外键Chart)。Box模型有一个字段number定义它们在Chart.

现在Box将有一个返回其内容的方法。内容是什么,取决于前一个盒子和下一个盒子的属性(如果有的话)。因此,从Box模型中我需要参考前面Box的和即将到来的Box

现在我看到两个选项:

  • 为 previous 和 next 制作外键Box
  • 要求Chart一个盒子在哪里number = (current box number -1 or +1)

最有效的方法是什么?为什么?如果我使用外键方法,它会做额外的查询还是自动建立这个连接?当然,我必须select_related在查询集上使用才能获得完整的Chart. 您认为哪个选项最具可扩展性?

我知道我当然可以对此进行测试,但我想知道其他人会怎么想,以及是否还有其他我没有意识到的解决方案。

4

1 回答 1

1

一个可能的解决方案是Box模型中的以下方法:

def get_ordering(self):
   try:
       top = Box.models.filter(number__lt=self.number).order_by('-number')[0]
   except IndexError:
       top = None

   try:
       bottom = Box.models.filter(number__gt=self.number).order_by('number')[0]
   except IndexError:
       top = None

   return top,bottom

但是,更好的解决方案是使用django-mpttdjango 的树遍历实现。

于 2013-08-09T08:20:44.543 回答