0
Django Rest API에서 쿼리 목록을 작성하고 필요한 필드를 기반으로 json 응답을 반환하는 데 문제가 있습니다 (예 : 그냥 id, username 대신 username). 한 가지 방법은 람다로 시도했지만 작동하지 않았습니다. Django API list with pagination - Page is not JSON serializableDjango Rest API에서 필요한 필드 만있는 모델의 json 목록을 반환합니다 - lambda가 작동하지 않습니다.
내가 특정 필드의 모델 기록을 나열하려는 API 쿼리가 있습니다
이
이의 연속이다. 예를 들어 모델의 모든 필드 대신 (id 및 username 만). 모델에서 정의 된 도우미 함수 .as_dict()에 따라 json 필드를 생성하기 위해 lambda를 사용하려고합니다. 그러나 아래의 추적에 오류가 표시됩니다. https://gist.github.com/axilaris/ee40b0936d7d5591275d593acdcdd62aAttributeError: 'dict' object has no attribute 'as_dict'
를 빼고 : 이것은 역 추적에서 오류가
@api_view(['POST'])
def employee_get_list_by_page(request):
# ----- YAML below for Swagger -----
"""
description: employee_get_list_by_page
parameters:
- name: token
type: string
required: true
location: form
- name: page
type: string
required: true
location: form
- name: page_limit
type: string
required: true
location: form
"""
token = request.POST['token']
try:
auth_employee = AuthEmployeeSessionToken.objects.get(token=token)
except AuthEmployeeSessionToken.DoesNotExist:
return Response("Invalid Token", status=status.HTTP_406_NOT_ACCEPTABLE)
employee_list = Employee.objects.filter(company = auth_employee.employee.company.id).order_by('id')
page = request.GET.get('page', request.POST['page'])
paginator = Paginator(employee_list, request.POST['page_limit'])
try:
employees = paginator.page(page)
except PageNotAnInteger:
employees = paginator.page(request.POST['page'])
except EmptyPage:
employees = paginator.page(paginator.num_pages)
# Here we map a lambda function over the queryset of Models to return the dictionary representation for each element in the list
employees_page = list(
map(lambda employee: employee.as_dict(), list(employees))
)
return Response(employees_page ,status=status.HTTP_200_OK)
입니다 : 여기
제 기능을 기반으로 나머지 API가 문제입니다 하단에있는 람다 부분을 볼 수있다 lambda, 결과는 다음과 같은 결과를 반환합니다. https://gist.github.com/axilaris/a92f7be8978212a9cbabbf10b9d120ea. 어쩌면 그것은 직원 키가 존재하지 않기 때문에 .as_dict()를 인식하지 못합니까? 나는 여기서 람다가 어떻게 작동하는지 익숙하지 않다.model.py (JSON에 대한 as_dict와 직원 모델())
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employee')
company = models.ForeignKey(Company)
username = models.CharField(max_length=30, blank=False)
email = models.CharField(max_length=30, blank=False)
first_name = models.CharField(max_length=30, blank=False)
last_name = models.CharField(max_length=30, blank=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.user.username
def as_dict(self):
return {"id": "%d" % self.id,
"username": self.username if self.username else ""}
질문 : 목록을 조회하고 바로 ID처럼 (I 필요한 필드를 기반으로 JSON 응답을 반환 할 수있는 방법 , 모든 사용자 이름 대신 사용자 이름)? 이 일을
는 여전히 같은 문제는 : 내가 그것을 작동 람다없이 실행하면 'DICT'개체가 어떤 속성 'as_dict' – Axil
이 없습니다. https://gist.github.com/axilaris/a27b0519f6df5eff148cd4feb2473ff4. as_dict()를 사용하는 방법에 대한 아이디어가 있습니까? – Axil
답변이 업데이트되었습니다. – rajkris