django-simple-history を使用して ManyToManyField の履歴を保存するにはどうすればよいですか。属性 m2m_filds で HistoricalRecords を使用しましたが、エラーがスローされます:予期しないキーワード引数 'm2m_fields'
質問する
3110 次
3 に答える
1
django-simple-history では、多対多の関係の履歴テーブルを使用できませんが、実際にはこれを実現する方法があります。
できることは、多対多のテーブルを手動で作成し、djangos の追加と削除を使用する代わりに、単にリレーションを作成して削除することです。例で見ると、次のようになります。
class Class(models.Model):
name = models.CharField(max_length=255)
surname = models.CharField(max_length=255)
history = HistoricalRecords()
class Student(models.Model):
name = models.CharField(max_length=255)
surname = models.CharField(max_length=255)
classes = models.ManyToManyField(Class)
history = HistoricalRecords()
次を使用して、多対多のテーブルを手動で作成できます。
class Class(models.Model):
name = models.CharField(max_length=255)
surname = models.CharField(max_length=255)
history = HistoricalRecords()
class Student(models.Model):
name = models.CharField(max_length=255)
surname = models.CharField(max_length=255)
history = HistoricalRecords()
class StudentClasses(models.Model):
student = models.ForeignKey(Student)
class = models.ForeignKey(Class)
history = HistoricalRecords()
現在使用している場合:
StudentClasses.objects.create(student=student, class=class)
代わりに、student.classes.add(class)
履歴テーブルと同じ多対多テーブルですべてを追跡します。delete()
student.classes.remove(class)
于 2021-08-31T13:35:58.410 に答える
0
django-simple-history の作者が言うように、これは特定のフィールドのみの変更を検出することは不可能です。
ご存知のように、simple-history は保存されている値をまったく調べません。保存または削除シグナルごとに、新しい履歴バージョンをやみくもに保存します。
彼はまた、フィールド トラッカーがこの仕事をする可能性があるとも言っています。
于 2016-02-10T11:20:29.340 に答える