覆盖模型的子方法

时间:2014-01-10 17:40:01

标签: django

我有两个由外键链接的模型:

class Car(models.Model):
    ...

class Seat(models.Model):
    page = models.ForeignKey(Car)
    position = models.IntegerField()
    ...

现在我可以访问这样的汽车座椅:

car = Car.objects.get(pk=123)
car_seats = car.seat_set.all()

我想覆盖all()方法,以便默认返回按位置排序的席位集。我知道如何覆盖Car模型中的seat_set,但是如何覆盖其中一个方法?

2 个答案:

答案 0 :(得分:2)

至少有两种方法可以解决这个问题:

  • 创建自定义管理器。

Documentation on custom manager

  • 指定订购属性

Documentation here

class Seat(models.Model):
    page = models.ForeignKey(Car)
    position = models.IntegerField()

    class Meta:
        ordering = ('position', )

请注意,默认情况下,这会在Seat queryset上设置排序。

当然,阿尔瓦罗还有另一种方法。

答案 1 :(得分:1)

我不会与经理混淆.. 定义属性:

@property
def ordered_seats(self):
    return self.seat_set.all().order_by('position')