2014-01-10 309 views
-1

我有兩個型號外鍵鏈接的子方法:覆蓋模型

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

有至少2種方法可以處理這個問題:

  • 創建自定義的經理。

Documentation on custom manager

  • 指定排序屬性

Documentation here

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

    class Meta: 
     ordering = ('position',) 

注意,這將全線默認設置的順序上Seat查詢集。

Ofcourse,Alvaro有另一種方法。

+0

謝謝,@ karthikr。我想我會選擇自定義管理器解決方案。 – mimo

+0

是的,在我看來這是一個乾淨的解決方案。 – karthikr

1

我我就不會惹經理.. 定義屬性:

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

我想過這個解決方案了。但是我認爲,在我的應用程序的上下文中更有意義的是讓席位始終排序,因此,改變seat_set的行爲(或者添加排序屬性,如@karthikr所建議的)似乎對我更好。無論如何,謝謝你的回答。 – mimo