0

私は2つのモデルを持っています:

class StateTax(models.Model):
    name = models.CharField(max_length=256)
    abbr = models.CharField(max_length=64, primary_key=True)
    rate = models.IntegerField(default=0)

class Account(models.Model):
    name = models.CharField(max_length=32)
    tax_regions = models.ManyToManyField(SalesTaxRegion, blank=True, null=True, related_name="accounts")

ただし、syncdb 中に作成される SQL Django は primary_key オプションを無視するようです。例えば:

CREATE TABLE `airship_salestaxregion` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(256) NOT NULL,
    `abbr` varchar(64) NOT NULL,
    `rate` integer NOT NULL
)
;
CREATE TABLE `airship_account_tax_regions` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `account_id` integer NOT NULL,
    `salestaxregion_id` integer NOT NULL,
    UNIQUE (`account_id`, `salestaxregion_id`)
)
;

(最初のテーブルにはまだ ID 列があり、関係テーブルがそれを参照していることに注意してください)

4

1 に答える 1

0

Like It がコメントで述べているように、テーブルが混同されています。SalesTaxRegion ではなく、StateTax の Python コードが提供されました。

StateTax コードを Django 1.4 と Postgres 9.2 でテストしたところ、次の結果が得られました -

-- DROP TABLE testing_statetax;

CREATE TABLE testing_statetax
(
  name character varying(256) NOT NULL,
  abbr character varying(64) NOT NULL,
  rate integer NOT NULL,
  CONSTRAINT testing_statetax_pkey PRIMARY KEY (abbr)
)

追加の id フィールドはありません。

于 2012-12-13T07:49:15.880 に答える