【问题标题】:Add a unique "intermediary" model to all my Django ManyToManyField()为我所有的 Django ManyToManyField() 添加一个独特的“中介”模型
【发布时间】:2018-06-04 19:30:22
【问题描述】:

大家好!

这样的问题我已经做了很多搜索。我在两 (2) 个月前完成了网站的构建,但今天团队决定跟踪每次将实例添加到 ManyToManyField() 字段中的模型。

我正在考虑使用through 参数来指向将充当中介的模型可能有效,但在我的情况下根本不起作用(70%)。只是因为我想有一个独特的中介模型来记录所有ManyToManyField()

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateTimeField(auto_now_add=True)

啊!需要一些东西。我需要为多对多关系中涉及的模型明确指定外键。

Django ContentType 可能会预期我的所有模型,但它不起作用,我想知道为什么?它还包含ForeignKey(中间模型所需的那个)。

我真的需要像ManytoManyField 一样编辑我的所有ManyToManyField 字段并创建模型吗?有没有办法记录date_joined 而无需为每个模型创建intermediary

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您是否正在寻找类似 django admin 的 LogEntry 模型? LogEntry 包含已更改的模型实例的 ContentType、实例的 id、更改的类型和抽象的更改消息。通过所有这些,您可以追溯对实例所做的更改。
    在 django admin 中,视图通过 log_change/addition/deletion:click 三种方法将记录添加到 LogEntry。

    【讨论】:

    • 我所有的 ManyToManyField 字段都可以这样做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2023-03-15
    相关资源
    最近更新 更多