2009-05-11 5 views
1

Моя модель похожа на эту. Это нормально или я должен сделать общий базовый класс абстрактным? Каковы различия между этим или составление его абстрактного и отсутствие лишней таблицы? Кажется странным, что теперь есть только один первичный ключ, который у меня есть.Безопасно ли реорганизовать мои модели django?

class Input(models.Model): 
     details = models.CharField(max_length=1000) 
     user = models.ForeignKey(User) 
     pub_date = models.DateTimeField('date published') 
     rating = models.IntegerField() 

     def __unicode__(self): 
      return self.details 

    class Case(Input): 
     title = models.CharField(max_length=200) 
     views = models.IntegerField() 

    class Argument(Input): 
     case = models.ForeignKey(Case) 
     side = models.BooleanField() 

это нормально, чтобы факторный материал вводил intpu Вход? Я заметил, что Cases and Arguments совместно используют первичный ключ.

так:

CREATE TABLE "cases_input" (
     "id" integer NOT NULL PRIMARY KEY, 
     "details" varchar(1000) NOT NULL, 
     "user_id" integer NOT NULL REFERENCES "auth_user" ("id"), 
     "pub_date" datetime NOT NULL, 
     "rating" integer NOT NULL 
    ) 
    ; 
    CREATE TABLE "cases_case" (
     "input_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "cases_input" ("id"), 
     "title" varchar(200) NOT NULL, 
     "views" integer NOT NULL 
    ) 
    ; 
    CREATE TABLE "cases_argument" (
     "input_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "cases_input" ("id"), 
     "case_id" integer NOT NULL REFERENCES "cases_case" ("input_ptr_id"), 
     "side" bool NOT NULL 
    ) 

ответ

1

От: django web site

Абстрактные базовые классы полезны, когда вы хотите поставить некоторые общие сведения в ряде других моделей. Вы пишете свой базовый класс и помещаете abstract = True в класс Meta. Эта модель не будет использоваться для создания любой таблицы базы данных. Вместо этого, когда он используется в качестве базового класса для других моделей, его поля будут добавлены к полям дочернего класса.

Смежные вопросы