[英]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.