Как применить фильтрацию по order by и distict в django orm?

Name            email                 date
_________________________________________________

Dane            dane@yahoo.com        2017-06-20
Kim             kim@gmail.com         2017-06-10
Hong            hong@gmail.com        2016-06-25
Dane            dddd@gmail.com        2017-06-04
Susan           Susan@gmail.com       2017-05-21
Dane            kkkk@gmail.com        2017-02-01
Susan           sss@gmail.com         2017-05-20

Я могу получить первые записи каждой уникальной записи, используя EmailModel.objects.all().order_by('date').distinct('Name'). это возвращает

 Name            email                 date
_________________________________________________

Dane            dane@yahoo.com        2017-06-20
Kim             kim@gmail.com         2017-06-10
Hong            hong@gmail.com        2016-06-25
Susan           Susan@gmail.com       2017-05-21

Что я хочу сделать здесь, это включить его в результат, только если первая запись является чем-то другим, как более фильтрация над ним? Например, я не хочу включать его в результат, если первый email id является dane@yahoo.com для Dave и только включить его, если это что-то другое.

Вы можете использовать F() выражения с __istartswith поиском, чтобы исключить те письма, которые начинаются с их имени так:

EmailModel.objects.exclude(email__istartswith=F('Name')).order_by("date").distinct("Name")

Или вы хотите избежать Name во всем письме, поэтому вы можете использовать __icontains поиск таким образом:

EmailModel.objects.exclude(email__icontains=F('Name')).order_by("date").distinct("Name")

Предполагается, что имя вашей модели - User Поэтому для заказа по с фильтром вы можете использовать

User.object.filter(parameters).order_by(parameters)

Ну, вы можете попробовать что-то безумное вроде этого:

   variable = modelname.objects.filter(
        ....=....).values(
        'mention_the_column_names_if_you_need_any'
    ).order_by(
        'mention_the_column_name_to_be_sorted'
    ).distinct()

Ответьте на это сообщение, если проблема все еще сохраняется.

Вернуться на верх