developer tip

Django에서 values ​​() 항목의 이름을 바꾸는 방법은 무엇입니까?

optionbox 2020. 9. 20. 09:31
반응형

Django에서 values ​​() 항목의 이름을 바꾸는 방법은 무엇입니까?


djangoproject.com의이 티켓 과 거의 동일 하지만 추가 형식을 사용 하고 싶습니다 . 이 쿼리에서

>>> MyModel.objects.values('cryptic_value_name')
[{'cryptic_value_name': 1}, {'cryptic_value_name': 2}]

나는 다음과 같은 것을 얻고 싶다.

>>> MyModel.objects.values(renamed_value='cryptic_value_name')
[{'renamed_value': 1}, {'renamed_value': 2}]

다른 기본 제공 방법이 있습니까 아니면 수동으로 수행해야합니까?


약간 해키하지만 다음 extra방법을 사용할 수 있습니다 .

MyModel.objects.extra(
  select={
    'renamed_value': 'cryptic_value_name'
  }
).values(
  'renamed_value'
)

이것은 기본적으로 SELECT cryptic_value_name AS renamed_valueSQL에서 수행됩니다.

다른 옵션은 항상 이름이 변경된 버전을 원하지만 db에 알 수없는 이름이있는 경우 새 이름으로 필드에 이름을 지정하지만 db_columndb의 원래 이름을 참조하는 데 사용 하는 것입니다.


에서 django>=1.8당신은 주석과 F 객체를 사용할 수 있습니다

from django.db.models import F

MyModel.objects.annotate(renamed_value=F('cryptic_value_name')).values('renamed_value')

또한 django 문서extra() 에서 더 이상 사용되지 않을 것입니다 .

이는 향후 언젠가는 지원 중단하려는 오래된 API입니다. 다른 queryset 메서드를 사용하여 쿼리를 표현할 수없는 경우에만 사용하십시오. 이를 사용해야하는 경우 사용 사례와 함께 QuerySet.extra 키워드를 사용하여 티켓을 제출하십시오 (먼저 기존 티켓 목록을 확인하십시오). 그러면 extra () 제거를 허용하도록 QuerySet API를 향상시킬 수 있습니다. 더 이상이 방법에 대한 버그를 개선하거나 수정하지 않습니다.


다른 관리자 방법을 사용하지 않고 (에서 테스트 됨 v2.0.8) :

from django.db.models import F

MyModel.objects.values(renamed_value=F('cryptic_value_name'))

나는 django 1.11.6으로 작업하고 있습니다

(그리고 key : value 쌍은 수락 된 대답의 쌍과 반대입니다)

이것이 내 프로젝트에서 작동하도록 만드는 방법입니다.

def json(university):
    address = UniversityAddress.objects.filter(university=university)
    address = address.extra(select={'city__state__country__name': 'country', 'city__state__name': 'state', 'city__name': 'city'})
    address = address.values('country', 'state', "city", 'street', "postal_code").get()
    return address

동시 objects.filter (). extra (). values ​​()를 추가하는 것은 위와 동일합니다.


모드의 몇 가지 필드의 이름을 바꾸려면 간단합니다.

시험

projects = Project.objects.filter()
projects = [{'id': p.id, 'name': '%s (ID:%s)' % (p.department, p.id)} for p in projects]

Here i do not have a name field in the table, but i can get that after tweaking a little bit.

참고URL : https://stackoverflow.com/questions/10598940/how-to-rename-items-in-values-in-django

반응형