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

标签 python sql django model manytomanyfield

我正在处理一个使用多个 ManyToManyField 的项目,但是此时我意识到我希望 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
)
;

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

最佳答案

这不是正确的做法。参见 Extra fields on many-to-many relationships在 Django 文档中。

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

关于python - 使用自定义字段扩展 Django 的 ManyToManyField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18013814/

相关文章:

sql - 不带 FROM 子句的 SELECT

c# - SQL Server 2008 和连接字符串

python - 带有 GKE 的 GCS,403 写入 GCS 存储桶的权限不足

python - 以 Django 形式翻译占位符

python - pymysql:MySQL 参数化 LIKE 查询

python - 在 Django/Python 中复制或克隆一个对象实例

python - Linux - 奇怪的 Python 输出

mysql - 令人尴尬的简单 SQL 问题)

django - 在 View 之外访问经过身份验证的用户

python - Django 模板不存在