2009-05-11 13 views
1

Mein Modell ist ähnlich. Ist das ok oder sollte ich die gemeinsame Basisklasse abstrakt machen? Was sind die Unterschiede zwischen diesem oder machen es abstrakt und keine zusätzliche Tabelle? Es ist merkwürdig, dass es jetzt nur einen Primärschlüssel gibt, da ich die Fakten ausgeklammert habe.ist es sicher, meine Django-Modelle umzuformen?

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() 

ist das ok um auszustopfen intpu Input? Ich habe festgestellt, dass Fälle und Argumente einen Primärschlüssel teilen.

wie folgt aus:

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 
    ) 

Antwort

1

Von: django web site

abstrakte Basisklassen sind nützlich, wenn Sie einige allgemeine Informationen in einer Reihe anderer Modelle setzen wollen. Sie schreiben Ihre Basisklasse und setzen in der Meta-Klasse abstract = True. Dieses Modell wird dann nicht zum Erstellen einer Datenbanktabelle verwendet. Wenn es als Basisklasse für andere Modelle verwendet wird, werden seine Felder stattdessen denen der untergeordneten Klasse hinzugefügt.

Verwandte Themen