【发布时间】:2015-09-22 16:14:37
【问题描述】:
我有一个 Django 项目,我需要基于项目的现有模型创建 API REST。我的意思是,是否可以只导入 api/v1/models.py 中的模型?而且我需要使用嵌套的序列化程序,但我不太了解文档。
更新:
我有一个项目“酒店”,在项目中我有各种应用程序,例如“预订”、“面板”、“联系”等等。因此,每个应用程序都有模型、视图、url。
我需要根据每个模型创建 API REST。现在我创建了一个名为“api”的带有rest-framework的新应用程序,并且在模型中我只导入其他应用程序的模型。基本上这是我项目的根。
hotel/
booking/
__init__.py
views.py
models.py
forms.py
urls.py
panel
contact
api/ (with rest-framework)
__init__.py
models.py
serializers.py
urls.py
views.py
实际上在api中是这样的结构:
# models.py
from booking.models import ReserveClient, CodeClient, CodeHour
# serializers.py
from rest_framework import serializers
from api.models import CodeClient, CodeHour
class CodeHourSerializer(serializers.ModelSerializer):
class Meta:
model = CodeHour
fields = (
'hours',
'min_hours',
)
class CodeClientSerializer(serializers.ModelSerializer):
class Meta:
model = CodeClient
fields = (
'id',
'code',
'date',
'max_use',
'unique_for_user',
'new_client',
'message',
'comment',
)
# views.py
import django_filters
from api.models import CodeClient, CodeHour
from api.serializers import CodeClientSerializer, CodeHourSerializer
class CodeClientFilter(django_filters.FilterSet):
class Meta:
model = CodeClient
fields = ['code']
class CodeClientList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = CodeClient.objects.all()
serializer_class = CodeClientSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = CodeClientFilter
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
好的,现在我想用两个序列化器生成一个视图,因为我需要这样的响应 JSON:
[
{
id: 4,
code: "3hours",
date: null,
max_use: 0,
unique_for_user: true,
new_client: true,
menssage: "",
comment: "",
hours: "", (CodeHourSerializer)
min_hours: "", (CodeHourSerializer)
}
]
希望代码会更容易理解。
谢谢。
古斯塔沃。
【问题讨论】:
-
谢谢,我会更新问题
标签: python django api rest django-rest-framework