Use a materialized Extension.latest_version field instead of a dynamic property #152
@ -715,13 +715,7 @@ class Version(CreatedModifiedMixin, RatingMixin, TrackChangesMixin, models.Model
|
||||
message=f'uploaded new version: {self.version}',
|
||||
).save()
|
||||
|
||||
# we assume that self is the latest created version
|
||||
# if two versions are saved at the same time, we have a data race
|
||||
if self.file.status in self.extension.valid_file_statuses:
|
||||
self.extension.latest_version = self
|
||||
self.extension.save(update_fields={'latest_version'})
|
||||
|
||||
self.extension.update_metadata_from_version(self)
|
||||
self.extension.update_latest_version()
|
||||
|
||||
@transaction.atomic
|
||||
def delete(self, *args, **kwargs):
|
||||
|
@ -4,6 +4,7 @@ import logging
|
||||
from actstream.actions import follow, unfollow
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
from django.db import transaction
|
||||
from django.db.models.signals import m2m_changed, pre_save, post_save, pre_delete
|
||||
from django.dispatch import receiver
|
||||
|
||||
@ -57,8 +58,8 @@ def _record_changes(
|
||||
instance.record_status_change(was_changed, old_state, **kwargs)
|
||||
|
||||
|
||||
# TODO? split this out into version.approve that would take care of updating file.status and
|
||||
# recomputing extension.latest_version
|
||||
# TODO? move this out into version.approve that would take care of updating file.status and
|
||||
# recomputing extension's is_listed and latest_version fields
|
||||
@receiver(post_save, sender=files.models.File)
|
||||
def _update_version(
|
||||
sender: object,
|
||||
@ -72,8 +73,9 @@ def _update_version(
|
||||
|
||||
if hasattr(instance, 'version'):
|
||||
extension = instance.version.extension
|
||||
extension.update_is_listed()
|
||||
extension.update_latest_version()
|
||||
with transaction.atomic():
|
||||
extension.update_is_listed()
|
||||
extension.update_latest_version()
|
||||
|
||||
|
||||
@receiver(post_save, sender=extensions.models.Extension)
|
||||
|
Loading…
Reference in New Issue
Block a user