从注解返回的字典列表中获取name键的值,然后按名称排序?
Posted
技术标签:
【中文标题】从注解返回的字典列表中获取name键的值,然后按名称排序?【英文标题】:Get the value of name key from the list of dictionaries return by the annotate and then sort by name? 【发布时间】:2020-05-02 22:37:59 【问题描述】:我的代码
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')
的结果返回为 list 而不是 str
注意:该列表可以包含超过 1 个字典,我只想返回名称。任何努力都将不胜感激
【问题讨论】:
您返回的是字典(或 JSON 对象),而不是字符串 我正在尝试返回一个字典对象,但无法返回它@TimothyWong,因为 F('areas') 将字典列表作为导致问题的字符串返回。 【参考方案1】:您需要annotate
by F("areas")
来做什么?
只需将其删除并访问“区域”作为 QS 中对象的属性。
【讨论】:
那么 admin_order_field 呢?我应该传递什么? 我对问题进行了一些更改,以帮助您了解区域不是我要注释的唯一字段,因此我不能将“区域”作为属性,因为我无法定义任何内容对于 admin_order_field @ChetanVashisth 它应该在不使用F
的实例上可用。
'["Name":'CV',"class":"hello","Name":'NYC',"class":"hello"]' 这是字符串存储在字符字段中,我想按名称字段排序,那么我们该怎么做??? @Krzysztof Szularz
在 Python 中排序。以上是关于从注解返回的字典列表中获取name键的值,然后按名称排序?的主要内容,如果未能解决你的问题,请参考以下文章