#python #django #django-models
#python #django #django-модели
Вопрос:
Итак, у меня есть это:
class Thread(models.Model):
first_thread_notification = models.IntegerField(default=0)
second_thread_notification = models.IntegerField(default=0)
Мне нужно упорядочить объекты в зависимости от суммы 2 объектов:
class Meta:
ordering = ['-first_thread_notification' '-second_thread_notification']
Я знаю, что это неверно, но как я могу это сделать?
Редактировать
class ManagerSum(models.Manager):
Thread.objects.annotate(
total=ExpressionWrapper(
F('first_thread_notification') F('-second_thread_notification'),
output_field=IntegerField(),
)
).order_by('-total')
class Thread(models.Model):
first_thread_notification = models.IntegerField(default=0)
second_thread_notification = models.IntegerField(default=0)
total_notifications = ManagerSum()
class Meta:
ordering = ['-total_notifications']
правильно ли это?
Ответ №1:
Вы можете использовать аннотацию, чтобы суммировать их с помощью выражения F.
from django.db.models import IntegerField, ExpressionWrapper
Thread.objects.annotate(
total=ExpressionWrapper(
F('first_thread_notification') F('-second_thread_notification'),
output_field=IntegerField(),
)
).order_by('-total')
Комментарии:
1. Итак, мне нужно добавить его в мета-класс или в класс модели?
2. К сожалению, нет, прочитайте эту часть документации: docs.djangoproject.com/en/3.1/topics/db/managers/… Это должно помочь вам на правильном пути.