django-rest에서 데이터를 검색하여 형식으로 표시
ForeignKey에 링크된 클래스가 2개 있습니다.첫 번째 클래스는 "Categories"로, "ID"와 "Name" 속성을 가집니다.두 번째 클래스는 "Documents"로, "ID", "Title" 및 "User" 속성을 가지며 마지막 클래스는 첫 번째 클래스에서 정의된 카테고리와 연결됩니다.
저는 Vue를 기반으로 프런트 엔드를 개발하고 있기 때문에 django-rest에서 데이터를 취득하여 폼으로 표시하는 방법을 알고 싶습니다.예를 들어, 사용자가 새 문서를 추가할 때 모든 카테고리 옵션 중에서 선택해야 합니다.카테고리는 모든 문서에 공통입니다.
예: 범주 = [{"ID: 0, "이름 "스포츠", {"ID": 1, "이름": "음악"}]
새 문서를 추가할 양식:
제목 : XXXX
카테고리:
스포츠,
음악
models.py
from django.db import models
class Category(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
class Documents(models.Model):
id = models.AutoField(primary_key=True)
title= models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
아래와 같은 답변을 받으면 문제가 해결될 것 같습니다.
["docs":
[{"ID": 1, "Title": "Doc1", "Category": Sports},
{"ID": 2, "Title": "Doc2", "Category": Music}],
"categories":
[{"ID": 0, "Name: "Sports"},
{"ID": 1, "Name": "Music"}]
Vue에 대한 정보는 없지만 GET 요청을 사용하여 모든 카테고리를 가져온 다음 드롭다운 메뉴를 옵션으로 채우고 제출 시 드롭다운 값을 얻을 수 있습니다.
양식을 생성하기 전에 구분하여 모든 카테고리를 가져올 수 있습니다.
이를 수행하려면 CategorySerializer 및 ListCategoryProvider를 작성해야 합니다.
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = {'name'}
class ListCategoryProvider(generics.ListAPIView):
serializer_class = CategorySerializer
def get_queryset(self):
queryset = Category.objects.all()
return queryset
그런 다음 모든 카테고리 이름을 포함하는 JSON을 해석하여 폼에 표시해야 합니다.
1) 카테고리 및 문서용으로 장고 받침대에 시리얼라이저를 작성합니다.serializer https://www.django-rest-framework.org/api-guide/serializers/ 링크를 참조하십시오.
2) 문서를 삽입할 수 있는 폼을 html로 작성합니다.javascript(vue)에서 카테고리에 대한 Ajax request(get request)를 호출하여 선택 옵션에 카테고리를 표시할 수 있습니다.
언급URL : https://stackoverflow.com/questions/56580115/retrieve-data-from-django-rest-to-show-in-a-form
'programing' 카테고리의 다른 글
v-if / v-show를 사용하지 않고 vue로 이행 (0) | 2022.08.25 |
---|---|
VueJ 컴포넌트에서 데이터를 가져오는 방법s (0) | 2022.08.25 |
반사란 무엇이며 왜 유용한가? (0) | 2022.08.25 |
fread는 실제로 어떻게 작동합니까? (0) | 2022.08.25 |
PHP의 join()과 같은 어레이의 Java 함수? (0) | 2022.08.25 |