Skip to content
Snippets Groups Projects
Verified Commit 42444fbf authored by Frank Sauerburger's avatar Frank Sauerburger
Browse files

Use custom manager for Plot to defer uhepp loading

parent 71e3f956
No related branches found
No related tags found
1 merge request!16Resolve "Defer uhepp data retrieval"
Pipeline #7320 failed
from django.core.management.base import BaseCommand
from uhepp_vault.models import Plot
class Command(BaseCommand):
def handle(self, *args, **options):
print("Setting title fields")
for plot in Plot.objects.filter(title__isnull=True):
print(f" Update {plot.uuid}")
plot.title = str(plot)
plot.save()
print("Done")
...@@ -40,12 +40,21 @@ class Collection(models.Model): ...@@ -40,12 +40,21 @@ class Collection(models.Model):
def __str__(self): def __str__(self):
return f"{self.owner}: {self.title}" return f"{self.owner}: {self.title}"
class LazyPlotManger(models.Manager):
use_for_related_fields = True
def get_queryset(self, *args, **kwargs):
return super() \
.get_queryset(*args, **kwargs) \
.defer("uhepp")
class Plot(models.Model): class Plot(models.Model):
"""Database record of a uhepp compliant plot""" """Database record of a uhepp compliant plot"""
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4) uuid = models.UUIDField(primary_key=True, default=uuid.uuid4)
uhepp = models.JSONField() uhepp = models.JSONField()
ui_view_count = models.IntegerField(default=0) ui_view_count = models.IntegerField(default=0)
api_view_count = models.IntegerField(default=0) api_view_count = models.IntegerField(default=0)
title = models.TextField(null=True, blank=True)
collection = models.ForeignKey( collection = models.ForeignKey(
Collection, Collection,
...@@ -53,6 +62,8 @@ class Plot(models.Model): ...@@ -53,6 +62,8 @@ class Plot(models.Model):
related_name='plots' related_name='plots'
) )
objects = LazyPlotManger()
def view_count(self): def view_count(self):
# Plus 1 since increments are not updated # Plus 1 since increments are not updated
return self.api_view_count + self.ui_view_count + 1 return self.api_view_count + self.ui_view_count + 1
...@@ -70,6 +81,9 @@ class Plot(models.Model): ...@@ -70,6 +81,9 @@ class Plot(models.Model):
) )
def __str__(self): def __str__(self):
if self.title:
return self.title
try: try:
metadata = self.uhepp.get("metadata", {}) metadata = self.uhepp.get("metadata", {})
filename = metadata.get("filename") filename = metadata.get("filename")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment