使用自定义字段扩展 Django 的 ManyToManyField

pon*_*cat 3 python sql django model manytomanyfield

我正在处理一个使用多个 ManyToManyFields 的项目,但是,此时我意识到我希望 ManyToManyField 存储一些额外的值(主要是自动设置的),例如创建连接时的时间戳。我试过了,并models.ManyToManyField用我的自定义替换了参考ManyToManyField

class CustomManyToManyField(models.ManyToManyField):
    date_registered = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

然后我的模型:

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


class B(models.Model):
    m2m = CustomManyToManyField(A)
    name = models.CharField(max_length=32)
Run Code Online (Sandbox Code Playgroud)

但是,运行会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
)
;
Run Code Online (Sandbox Code Playgroud)

它没有考虑date_registered我在扩展文件中定义的字段CustomManyToManyField。为什么不?

Ant*_*des 6

这不是正确的方法。请参阅Django 文档中多对多关系的额外字段

此外,CustomManyToManyField您创建的是自定义字段,而不是模型,因此它不能包含字段。