Python Django сортировка с лямбда с оператором if - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть дата и некоторая долларовая модель брутто:

class FirstDate(models.Model):
    gross = models.DecimalField(max_digits=12, decimal_places=2, default=0)
    updated = models.DateTimeField(auto_now=True)

class SecondDate(models.Model):
    gross = models.DecimalField(max_digits=12, decimal_places=2, default=0)
    updated = models.DateTimeField(auto_now=True)

И я хочу отсортировать ее по gross, а если gross - то же самое, то отсортировать по updated поле

Например,

qs1 = SoloDate.objects.all()[:2]
qs2 = GroupDate.objects.all()[:2]

result_list = sorted(
    chain(qs1, qs2),
    key=lambda x: x.gross # and if gross is the same, for the gross same objects, x.updated and then update was also the same, x.pk,
    reverse=True
)

Я имею в виду, позвольте мне сказать, что есть два объекта по отдельности от qs1 и qs2.

# objects from qs1
qs1_obj1 = {
'pk': 1,
'gross': 5,
'updated': 2018-11-24 10:53:23.360707+00:00
}

qs1_obj2 = {
'pk': 2,
'gross': 5,
'updated': 2018-11-25 10:53:23.360707+00:00
}

# objects from qs2
qs2_obj1 = {
'pk': 3,
'gross': 5,
'updated': 2018-11-24 10:53:23.360707+00:00
}

qs2_obj2 = {
'pk': 4,
'gross': 1,
'updated': 2018-11-23 10:53:23.360707+00:00
}

Это result_list порядок будет qs1_obj1, qs2_obj1, qs1_obj2, qs_2_obj_2.

Причины:

qs1_obj1: 1, брутто, 2, обновлено, 3, ПК,

qs2_obj1: 1. по брутто, 2. по обновлению, 3. но pk не был хорош,

qs1_obj2: 1. по брутто, 2.но по dpdated было поздно,

qs2_obj2: 1. брутто было мало.

Возможно, это не хороший вопрос или надоедливый вопрос, мне нужна помощь.

Вопросная строка такова:

key=lambda x: x.gross # and if gross is the same, for the same gross objects, x.updated and then update was also the same, x.pk,

Как я могу это сделать?

1 Ответ

0 голосов
/ 24 ноября 2018

Попробуйте отсортировать по нескольким полям, например так:

result_list = sorted(
    chain(qs1, qs2),
    <b>key=lambda x: (x.gross, -x.updated.timestamp(), x.pk)</b> # and if gross is the same, for the gross same objects, x.updated and then update was also the same, x.pk,
    reverse=True
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...