3

複数の ManyToManyFields を使用するプロジェクトに取り組んでいますが、この時点で、接続が作成されたときのタイムスタンプなど、ManyToManyField にいくつかの追加の値 (ほとんどが自動的に設定されます) を保存する必要があることに気付きました。models.ManyToManyFieldこれを試して、への参照をカスタムに置き換えましたManyToManyField

class CustomManyToManyField(models.ManyToManyField):
    date_registered = models.DateTimeField(auto_now=True)

そして、私のモデル:

class A(models.Model):
    name = models.CharField(max_length=32)


class B(models.Model):
    m2m = CustomManyToManyField(A)
    name = models.CharField(max_length=32)

ただし、実行python manage.py sql testappすると次の SQL が返されます。

BEGIN;
CREATE TABLE "testapp_a" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(32) NOT NULL
)
;
CREATE TABLE "testapp_b_m2m" (
    "id" integer NOT NULL PRIMARY KEY,
    "b_id" integer NOT NULL,
    "a_id" integer NOT NULL REFERENCES "testapp_a" ("id"),
    UNIQUE ("b_id", "a_id")
)
;
CREATE TABLE "testapp_b" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(32) NOT NULL
)
;

date_registeredextended で定義したフィールドは考慮されませんCustomManyToManyField。なぜだめですか?

4

1 に答える 1

6

これは正しい方法ではありません。Django ドキュメントの多対多関係に関する追加フ​​ィールドを参照してください。

また、CustomManyToManyField作成した はモデルではなくカスタムフィールドであるため、フィールドを含めることはできません。

于 2013-08-02T09:53:05.300 に答える