2009-05-11 5 views
1

Mon modèle est similaire à celui-ci. Est-ce correct ou devrais-je rendre la classe de base commune abstraite? Quels sont les differcenes entre ceci ou le rendant abstrait et ne pas avoir une table supplémentaire? Il semble étrange qu'il n'y ait qu'une seule clé primaire maintenant que j'ai pris en compte les choses.est-il sûr de refactoriser mes modèles 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() 

est-ce ok pour factoriser les choses intpu Entrée? J'ai remarqué que les cas et les arguments partagent une clé primaire.

comme ceci:

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 
    ) 

Répondre

1

De: django web site

classes de base abstraites sont utiles lorsque vous voulez mettre un peu d'informations communes dans un certain nombre d'autres modèles. Vous écrivez votre classe de base et mettez abstract = True dans la classe Meta. Ce modèle ne sera ensuite utilisé pour créer aucune table de base de données. Au lieu de cela, lorsqu'il est utilisé comme classe de base pour d'autres modèles, ses champs seront ajoutés à ceux de la classe enfant.

Questions connexes