何やってるかよくわからなかったので動作を追った。
self
<course.fields.OrderField: order>
self.model
<class 'course.models.Module'>
self.attname
'order'
qs = self.model.objects.all()
<QuerySet [<Module: 0.数と式>, <Module: 1.方程式と不等式>, <Module: 2.2次関数>]>
query = {field: getattr(model_instance, field) for field in self.for_fields}
{'course': <Course: 数Ⅰ>}
qs.filter(**query)
<QuerySet [<Module: 0.数と式>, <Module: 1.方程式と不等式>, <Module: 2.2次関数>]>
item = qs.filter(**query).latest(self.attname)
<Module: 2.2次関数>
getattr(item, self.attname)
2
item
<Module: 2.2次関数>
item.order
2
getattrってrubyのObject#sendみたいなものか。リスト内包表記でfor_fieldsの要素一個ずつ取り出して、後でfiliter()に渡すのでfieldをキーにしてdict{}に保存してる。それでModule/Contentの一番最後のオブジェクトのorder調べて、その次に表示したいので+1にしてるのね。