python - django-simple-history 中 ManyToManyField 的历史

标签 python django django-models django-admin

简而言之,我需要将对我的一个模型的多对多字段所做的更改保存在历史记录中。

我可以从:https://github.com/Kyruus/django-simple-history/commit/5ba8d2b4d72819f154a11f297796e6a2bb7172bf 中看到 支持 M2M。然而,每当我对 M2M 字段进行更改时,它在所有历史记录中也会发生变化,就好像从未发生过更改一样。我是 django 和 python 的新手,所以我可能遗漏了一些东西。

我的模型.py:

from django.db import models
from simple_history.models import HistoricalRecords

class Student(models.Model):
  studentname = models.CharField(max_length=50, verbose_name='Name')

class ClassRoom(models.Model):
  classname = models.CharField(max_length=50, verbose_name='Name')
  students = models.ManyToManyField(Student)
  history = HistoricalRecords()

我的 admin.py:

from django.contrib import admin
from school.models import Student, ClassRoom
from simple_history.admin import SimpleHistoryAdmin

class StudentAdmin(SimpleHistoryAdmin):
  list_display = ('studentname',)

class ClassRoomAdmin(SimpleHistoryAdmin):
  list_display = ('classname',)

admin.site.register(Student,StudentAdmin)
admin.site.register(ClassRoom, ClassRoomAdmin)

我通过以下方式安装了 django-simple-history:

>pip install django-simple-history

最佳答案

这是一个老的悬而未决的问题,现在可能已经无关紧要了,但是从有问题的项目代码来看,ClassRoom 模型的最后一行似乎应该改为

history = HistoricalRecords(m2m_fields=['students'])

关于python - django-simple-history 中 ManyToManyField 的历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209655/

相关文章:

python - Tkinter Python : How to pass more than one argument through a lambda function in an OptionMenu

python - 在 Python 中从存储在 HDFS 上的文件中读取行的最有效方法是什么?

python - mongoengine - 对 EmbeddedDocumentField 的 ListField 进行查询

javascript - django 中的 Highcharts

Django 计算嵌套的 ManyToManyField 对象

python - 用 mayavi 或 vtk 绘制凹形物体

python - 如何为返回巨大稀疏矩阵的函数编写Python单元测试

python - Django Rest Framework中如何根据一些请求参数限制序列化器相关字段的查询集

python - 如何使得在数据库中保存数据时,函数生成的数据自动插入到Django ORM字段中

python - 验证datefield,以便它不会在Django中使用将来的日期?