DRF - 将模型序列化器渲染为HTML创建表单

时间:2016-09-23 13:25:33

标签: python html django forms django-rest-framework

我正在尝试渲染表单来创建新对象。我已经在一个单独的应用程序中定义了我的API,现在我想在同一个项目的另一个应用程序中使用它。我遵循了教程,现在我有了一个默认路由器,一个ModelSerializer和一个ModelViewSet以及一个自动创建的可浏览HTML API,它还自动在列表页面上呈现HTML表单,以创建新对象。我想在我的项目中包含此表单。 当然我可以自己编写一个表单,只需使用jQuery向API发出POST请求,但我必须手动为每个模型创建一个表单。如果模型发生变化,我将不得不更新表格。我希望使用DRF和此处的文档来完成此任务: http://www.django-rest-framework.org/topics/html-and-forms/

可悲的是,我没有在互联网上找到任何例子。我确实在StackOverflow上找到了一个问题但是没有解决方案。

类TaskViewSet(viewsets.ModelViewSet):(在API / views.py中)

 hotel.SelectedInPreviousLeg = 
     basket
        .Any(b => b.Accomodations
        .Any(a => a.HotelID == h.ID));                   

类TaskSerializer(serializers.ModelSerializer):(在API / serializers.py中)

serializer_class = TaskSerializer
permission_classes = (permissions.IsAuthenticated,)

def get_queryset(self):
    return Question.objects.all().filter(owner=self.request.user.institute)

def list(self, request):
    serializer = TaskSerializer(self.get_queryset(), many=True)
    return Response(serializer.data)

def perform_create(self, serializer):
    serializer.save(owner=self.request.user.institute, created_by=self.request.user, modified_by=self.request.user)

def perform_update(self, serializer):
    serializer.save(owner=self.request.user.institute, modified_by=self.request.user)

urls.py 中,我使用默认路由器并添加:

owner = serializers.ReadOnlyField(source='owner.name')
created_by = serializers.ReadOnlyField(source='created_by.username')
modified_by = serializers.ReadOnlyField(source='modified_by.username')
class Meta:
    model = Question

现在,在我的其他应用程序(同一个项目)中,我想要一个创建表单,所以我将此代码添加到模板中:

router.register(r'questions', views.TaskViewSet, 'question')

可悲的是,我现在收到一个错误,在尝试访问该网站时根本无法帮助我。

' STR'对象没有属性'数据'

我尝试将 renderer_classes 的字段添加到我的ModelViewSet中,但随后我的可浏览API中断并且不再可用。我只想包含截屏底部呈现的表单。这是可能的还是我真的必须手动构建它?

1

0 个答案:

没有答案