Django выполняет аннотирование, подсчет и сравнение
У меня есть следующая Модель.
class Gallery(BaseModel):
company = models.ForeignKey(to=Company, on_delete=models.CASCADE)
image = models.ImageField(
upload_to=upload_company_image_to,
validators=[validate_image]
)
def __str__(self):
return f'{self.company.name}'
Я хочу разрешить загрузку максимум 5 изображений одной компанией, поэтому я попробовал свой запрос как
def clean(self):
print(Gallery.objects.values('company').annotate(Count('image')).count())
Я не знаю, как сравнить вышеприведенный запрос с Integer 5. Как мне это сделать?
Вы можете извлечь Company
, содержащие более пяти изображений, с помощью:
from django.db.models import Count
Company.objects.alias(
num_images=Count('gallery')
).filter(num_images__gt=5)
До версии django-3.2 вы можете работать с .annotate(…)
[Django-doc]:
from django.db.models import Count
Company.objects.annotate(
num_images=Count('gallery')
).filter(num_images__gt=5)