Python 当任何类型都可以有零个元素时,元素类型组合的解决方案

Python 当任何类型都可以有零个元素时,元素类型组合的解决方案,python,django,python-3.x,Python,Django,Python 3.x,我有3个模型/实体,A、B、C(后端是django) 在前端,我有3个空框,我需要在其中添加A、B、C的实例。 A、B、C的可用实例数可以是0到无限 理想情况下,我应该显示A的1个、B的1个和C的1个,但有时任何实体都可能没有实例。可以是无实例、一个实例或多个实例 我的基本方法是使用ifs,但效率不高,请参见伪代码中的一个分支: if not C: if A: if not B: show up to 3 of A if they are available

我有3个模型/实体,A、B、C(后端是django)

在前端,我有3个空框,我需要在其中添加A、B、C的实例。 A、B、C的可用实例数可以是0到无限

理想情况下,我应该显示A的1个、B的1个和C的1个,但有时任何实体都可能没有实例。可以是无实例、一个实例或多个实例

我的基本方法是使用
ifs
,但效率不高,请参见伪代码中的一个分支:

if not C:
   if A:
      if not B:
         show up to 3 of A if they are available
      elif B:
        if at least 2 of A:
          show 2 of A and 1 Of B
        if 1 of A:
          show 1 of A and up to 2 of B
   elif not A:
      show up to 3 of B if exist  
除了在所有分支上都有数十个
ifs
,它不会扩展,例如,如果我将来添加一个新的实体和/或框

所以,我在寻找一种可以扩展的算法。我正在使用Python、django、PostgreSQL。我提取数据,很简单:

A.objects.all().order_by('-id')[:3]

之后可以按型号订购;它正在工作,但我得到了类似于[a,c,a]的东西,我想要['a','a','c']@user3541631当然。如果您想按Django模型名称的字母顺序排序,您可以使用
排序(框[:3],key=lambda x:x.\u meta.model.\uuuuu name\uuuu)
我想要列表类型的索引顺序(a、b、c只是名称占位符,所以在示例中是字母顺序)
models = [A, B, C]
num_boxes = len(models)  # but could be different
objects = [list(model.objects.all().order_by('-id')[:num_boxes])
           for model in models]
boxes = []

while any(objects):
    for row in objects:
        if row:
            boxes.append(row.pop(0))

print(sorted(
    boxes[:num_boxes],
    key=lambda x: models.index(type(x))
))