使用自定义字段扩展 Django 的 ManyToManyField
Posted
技术标签:
【中文标题】使用自定义字段扩展 Django 的 ManyToManyField【英文标题】:Extend Django's ManyToManyField with custom fields 【发布时间】:2013-08-03 13:00:59 【问题描述】:我正在开发一个使用多个 ManyToManyFields 的项目,但是,此时我意识到我希望 ManyToManyField 存储一些额外的值(大部分是自动设置的),例如创建连接时的时间戳。我试过了,并用我的自定义 ManyToManyField
替换了对 models.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
)
;
它没有考虑我在扩展CustomManyToManyField
中定义的date_registered
字段。为什么不呢?
【问题讨论】:
【参考方案1】:这不是正确的做法。请参阅 Django 文档中的 Extra fields on many-to-many relationships。
另外,你创建的CustomManyToManyField
是自定义字段,不是模型,所以不能包含字段。
【讨论】:
谢谢。我在发布我的问题后立即找到了这个页面。我的大脑放了个大屁。以上是关于使用自定义字段扩展 Django 的 ManyToManyField的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2.8 表单 CollectionType 字段 manyTo many
如何创建一个 Django 自定义字段来存储 MYSQL DATETIME(6) 并在 Django/MySQL 中启用小数秒(毫秒或微秒)?