我有两节课:
class Manufacturer(models.Model):
name = models.CharField(max_length=50)
class Part(models.Model):
name = models.CharField(max_length=255)
manufacturer = models.ForeignKey(
Manufacturer,
verbose_name=_("Manufacturer"),
null=True,
blank=True,
help_text=_("The manufacturer of the part.")
)
现在我需要进行查询以获取链接到特定制造商的所有部件。我已经使用parts = self.part_set.all()
完成了这项工作。但现在我需要对订单进行排序。所以我假设.order_by()可以做到这一点,所以最后我有
def get_parts(self):
return list(self.part_set.all().order_by('name'))
不幸的是,这不是正确的排序。所以我的问题是:通过某种属性对引用另一个对象的对象列表进行排序的正确方法是什么?
答案 0 :(得分:1)
通过每个模型上的Meta
类,始终可以选择默认排序。所以:
class Part(models.Model):
name = models.CharField(max_length=255)
manufacturer = ...
class Meta:
ordering = ['name'] # or ['-name'] for descending
现在,每次获得Part
个对象时,除非在查询中使用order_by
,否则它们将按name
排序。
要回答你的问题,你可以使用它:
self.part_set.order_by('part__name')
但是如果您已经在ordering
课程中指定了Meta
Part
设置,那么您就不必这样写。而是写:
self.part_set.order_by('part')
并且Django将根据Part
Part
的{{1}}设置订购Meta
个对象。