添加一个独特的"中介"模型到我所有的Django ManyToManyField()

时间:2018-06-04 19:30:22

标签: django django-models

Hello Awesome People!

这个问题我已经做了很多搜索。我在两(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模型?

1 个答案:

答案 0 :(得分:2)

您是否正在寻找类似django admin' LogEntry模特的内容? LogEntry包含已更改的模型实例的ContentType,实例的ID,更改的类型和抽象更改消息。通过所有这些,您可以追溯对实例所做的更改 在django admin中,视图负责通过三种方法log_change/addition/deletionclick向LogEntry添加记录。