我正在开发一个使用多个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_registered
中定义的CustomManyToManyField
字段。为什么不呢?
答案 0 :(得分:4)
这不是正确的方法。请参阅Django文档中的Extra fields on many-to-many relationships。
此外,您创建的CustomManyToManyField
是自定义字段,而不是模型,因此不能包含字段。