безопасно ли проводить рефакторинг моих моделей Django? - PullRequest
1 голос
/ 11 мая 2009

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

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? Я заметил, что дела и аргументы имеют первичный ключ.

как это:

    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 Ответ

1 голос
/ 23 мая 2009

От: веб-сайт Django

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

...