繁体   English   中英

Django:按字段内容遍历QuerySet

[英]Django: Iterate over QuerySet by content of a field

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

这是我的模型定义:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM