然后按循环分组

时间:2019-01-21 23:26:04

标签: django

因此,我想在Django详细视图上循环显示产品。详细信息视图用于特定的卡车,它将把分配给它的所有产品运到城市。因此,视图中的所有产品都分配给了这辆卡车。

问题是,每个产品也都分配给特定客户。所以我希望视图看起来像

卡车1详细视图

客户1

  • 产品1产品2产品5

客户2

  • 产品3,产品4,产品6

作为一个基本示例。现实生活中的示例可能有20-30个产品和5-6个客户。

当然,我可以按某种顺序进行排序,但是我希望循环使用这些命令,以便在有新客户(类似于上述格式)时就可以开始新的格式设置,以便于简化查看要装载这辆卡车的员工。

这可能吗?因为这让我有些困惑。

编辑:

我的相关模型看起来像;

class Truck(models.Model):
    date = models.DateField()

class Agent(models.Model):
    name = models.CharField(max_length=255)

class Product(models.Model):
    name = models.CharField(max_length=255)
    truck = models.ForeignKey(Truck, on_delete=models.DO_NOTHING)
    agent = models.ForeignKey(Agent, on_delete=models.DO_NOTHING)
    status = models.IntegerField()

代理商=客户。值得一提的是,每种产品都是为每个客户专门制造的,并且只有一个实例。将每个实例通过卡车发送给客户后,它将收到更新的“状态”,并且不再分类为库存。

1 个答案:

答案 0 :(得分:0)

作为查询集,我们可以过滤某个int max_2d(const int size[], int array[][size]) { if (array == NULL) return -1; int max = array[0][0]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (max < array[i][j]) max = array[i][j]; } } return max; } int main() { int array[2][2] = { {1,2},{0,-3} }; printf("%d\n", max_2d(2, array)); return 0; } 上的Product,然后可以使用itertools.groupby [Python-doc]对每个Truck进行分组。请注意,您在此处显示的是一个 list (以及一个集合),因此在此处使用ListView [Django-doc]更有意义。

Agent

其中from app.models import Product from django.views.generic.list import ListView from itertools import groupby from operator import attrgetter class ProductCustomerListView(ListView): model = Product def get_queryset(self): return Product.objects.filter( truck_id=self.kwargs['truck_id'] ).prefetch_related('agent').order_by('agent_id') def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) context['grouped'] = groupby(context['object_list'], attrgetter('agent')) return context是一个URL参数,用于指定truck_id的ID,我们要为其显示按Truck分组的元素。

然后,在模板中,“展开” Agent

groupby