Как применить фильтрацию по 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()
Ответьте на это сообщение, если проблема все еще сохраняется.