2013-08-13 2 views
1

Интересно - возможно ли наследовать такие классы?Python Классы Иностранные ключи Наследование

Для exmple, у меня есть 2 абстрактные классы:

class Book(models.Model): 
     name = models.TextField() 

     class Meta: 
      abstract = True 

    class Page(models.Model) 
     num = models.IntegerField() 
     book = models.ForeignKey('Book') 

     class Meta: 
      abstract = True 

И так - я хочу, чтобы наследуемые классы для этих двух, пусть они будут BigBook и BigBookPage

Но если я сделайте это, питон говорит мне, что мое поле FK не может иметь отношения с абстрактной моделью. И я не могу найти способ переопределить FK в унаследованных моделях. Так что я должен ТОЛЬКО создавать внешние ключи в унаследованных моделях, а не в родителях?

И если у меня есть те же методы модели, которые используют внешние ключи, определенные в родительских моделях ... я должен переместить их на каждый ребенок - чтобы они могли использовать свои внешние ключи?

ответ

1

Похоже, что вы хотите отметить книгу как прокси = True. См. proxy models. Он создаст модель книги, но также позволит вам использовать другие модели, которые наследуют ее, позволяя вам настраивать функциональность подклассов.

class Book(models.Model): 
    class Meta: 
     proxy = True 

class BigBook(Book): 
    # BigBook properties go here.