Django:按字段

时间:2016-01-06 23:42:54

标签: python django

我需要通过两个字段的内容迭代一组模型对象。代码可能更有意义。

这是我的模型定义:

class Widget(models.Model):
    group = models.ForeignKey(WidgetGroup)
    style = models.CharField(max_length=40, blank=True)

我想对同一组和样式的小部件采取行动,因此我使用以下代码。它有效,但看起来并不整洁。足够典型的python和Django。有没有更好的方法呢?

widgets = Widget.objects.all()
for group in WidgetGroup.objects.all():
    group_widgets = widgets.filter(group=group)
    for style in set(group_widgets.values_list('style', flat=True)):
        group_style_widgets = group_widgets.filter(style=style)
        # Do something with group_style_widgets

编辑: 对我很重要,我首先按组进行迭代,然后再进行样式。想想像Markdown这样的预期输出:

# Group1
## Style1
## Style2
# Group2
## Style2
## Style3

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找这样的东西:

for group in WidgetGroup.objects.prefetch_related('widget_set').all():
    for group_style_widgets in group.widget_set.all():
        # Do something with group_style_widgets

或者如果您想特别使用这些样式:

styles = Widget.objects.all().values_list('style', flat=True).distinct()
for group in WidgetGroup.objects.prefetch_related('widget_set').all():
    for style in styles:
        group_style_widgets = group.widget_set.filter(style=style)
        # Do something with group_style_widgets