Получить значение имени ключа из списка словарей, возвращаемых по аннотации, а затем отсортировать по имени? - PullRequest
0 голосов
/ 16 января 2020

Мой код

def get_areas(self, obj):
        text = []
        if obj.areas and not obj.areas == []:
            print(json.loads(obj.area_count))
            print(type(obj.area_count))
            return json.loads(obj.area_count)
        return "-"

get_areas.short_description = "Areas"
get_areas.admin_order_field= "area_count"

def get_queryset(self, request):
        from django.contrib.postgres.fields.jsonb import KeyTextTransform
        qs = super(UserAdmin, self).get_queryset(request)
        filtered_query = qs.filter(
            is_superuser=False, is_staff=False
        ).annotate(
            wishlist_count=Count('wishlist', distinct=True),
            booking_count=Count('booking', distinct=True),
            review_count=Count('review', distinct=True),
            suggestion_count=Count('suggestion', distinct=True),
            home_city=NullIf('home__city'),
            home_country=NullIf('home__country'),              
            area_count = F('areas'),

        )

Я получаю список в виде типа str, который выглядит примерно так:

"[{'id': 98, 'name': 'Khalifa City and Masdar City', 'city': 'Abu Dhabi'},
{'id': 99, 'name': 'Masdar City', 'city': 'Abu Dhabi'}]"
<class 'str'>

Вместо этого я хочу получить список имен:

['Khalifa City and Masdar City','Madsar City']

Итак, как вернуть результат на area_count = F('areas') как список вместо str

Примечание: список может содержать более 1 словаря, и я хочу вернуть только имена. Любые усилия будут оценены

1 Ответ

1 голос
/ 16 января 2020

Зачем вам нужно annotate на F("areas") для?

Просто удалите его и получите доступ к «областям» как attr объекта в QS.

...