AttributeError: объект 'FieldInstanceTracker' не имеет атрибута 'saved_data'
Проблема с сигналом post_save?
class Book(models.Model):
room = models.ForeignKey(Room, on_delete=models.CASCADE, null=False)
library = models.ForeignKey(Library, on_delete=models.CASCADE, null=False)
created_at = models.DateTimeField(auto_now_add=True)
tracker = FieldTracker()
def update_service(sender, instance, **kwargs):
main_library = Library.object.get(id=1)
if not instance.library == library:
for book in instance.book_set.all():
book.delete()
post_save.connect(update_service, sender=Library)
lib/python3.7/site-packages/model_utils/tracker.py in set_saved_fields(self, fields) 106 self.saved_data = self.current() 107 else: --> 108 self.saved_data.update(**self.current(fields=fields)) 109 110 # предотвращение побочных эффектов изменяемых полей AttributeError: у объекта 'FieldInstanceTracker' нет атрибута 'saved_data'
Установите атрибут fields в trackerfield.
Проблема была исправлена в последней версии пакета
class Book(models.Model):
cls = models.ForeignKey(Class, on_delete=models.CASCADE, null=False)
library = models.ForeignKey(Library, on_delete=models.CASCADE, null=False)
created_at = models.DateTimeField(auto_now_add=True)
tracker = FieldTracker(fields=['XXXX'])
Fields должен содержать список полей, которые вы хотите отслеживать.
class является зарезервированным ключевым словом. Будьте осторожны !
Я нашел решение, оно мне понадобилось для обновления некоторых пакетов.
первым был:
django-model-utils==4.1.1 -> django-model-utils==4.2.0
.
Затем он также принес мне некоторые зависимости с 2 другими пакетами.
openwisp-utils==0.4.5 -> openwisp-utils==1.0.3
swapper==1.1.2 -> swapper==1.3.0
.
После того, как я обновил библиотеки, проблема исчезла.
Также мне не нужно было добавлять поля в Tracker:
tracker = FieldTracker(fields=['XXXX']))
Я разрешаю его по умолчанию:
tracker = FieldTracker()
Просто будьте осторожны с библиотеками, потому что я потратил много времени, думая, что это был мой код, но в конце концов это была проблема с библиотекой.