简而言之,我需要在历史上保存我的一个模型的多到多个领域所做的改变。
我可以从:https://github.com/Kyruus/django-simple-history/commit/5ba8d2b4d72819f154a11f297796e6a2bb7172bf中看出M2M是受支持的。然而,每当我对M2M字段进行更改时,它在所有历史上也会发生变化,就好像从未改变过一样。我对django和python很陌生,所以我可能错过了什么。
我的models.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-简单历史记录:
>pip install django-simple-history发布于 2015-04-28 21:10:30
这是一个老的公开问题,到现在为止可能无关紧要,但是从查看所讨论项目的代码来看,似乎应该将ClassRoom模型上的最后一行更改为
history = HistoricalRecords(m2m_fields=['students'])发布于 2021-08-31 13:41:41
由于m2m_fields实际上在标准分支中不可用,这里有一个使用django-简单历史包的替代解决方案。
您可以手动创建多个表,而不是使用djangos添加和删除,您只需创建和删除关系。如果你用一个例子来看它,我们就会看到:
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')
history = HistoricalRecords()
class StudentClassRooms(models.Model):
student = models.ForeignKey(Student)
classroom = models.ForeignKey(ClassRoom)
history = HistoricalRecords()如果您现在使用:
StudentClassRooms.objects.create(student=student, classroom=classroom),而不是classroom.students.add(student)和delete(),而不是classroom.student.remove(student),您将在历史表中对所有内容进行跟踪,并且对多个表进行相同的跟踪。
https://stackoverflow.com/questions/24209655
复制相似问题