Я создал другую версию модели шаблона, используя поле собственной ссылки с одним родительским шаблоном, когда пользователь обновляет любой шаблон, я создаю новую версию предыдущего шаблона.
Модель
class AppTemplate(models.Model):
app = models.ForeignKey( Application, on_delete=models.CASCADE, related_name="apps" )
name = models.CharField(max_length=100, null=False)
description = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
version_ref = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL)
version = models.FloatField(default=1.0)
Теперь я хочу отфильтровать шаблон для конкретного приложения c, если один шаблон имеет несколько версий, отображать только последний шаблон. Я сделал это с помощью цикла.
templates = AppTemplate.objects.filter(app=app_id, version_ref__isnull=True)
queryset = []
for template in templates:
child_template = AppTemplate.objects.filter(version_ref=template).order_by('-created_at')
if len(child_template) > 0:
queryset.append(child_template.first())
else:
queryset.append(template)
Как я могу улучшить свой фильтр набора запросов?