在angular.js

时间:2016-03-25 21:06:56

标签: javascript python angularjs django django-rest-framework

Django有formsets,其中多个表单可用于一个大表单。所以,让我们说一个人可以添加例如使用相同书籍形式的重复的图书馆formset mulitple书籍(提供作者和标题)。

如何使用Angular.js和Django Rest Framework实现相同的功能?我是Angular.js和Django Rest Framework的新手,需要一些指导,如何能够为一个大型表格(例如我的库)中的给定模型动态添加更多表单(例如书籍)并将其保存在Django后端。

1 个答案:

答案 0 :(得分:2)

您可以通过两个步骤实现此目的:

前端

在您的页面上创建一个<form>,用于根据需要构建用户输入的数据。在<form>元素中,您需要将ngForm用于多种形式&#39;验证行为正确(herengForm如何工作的一个很好的解释。假设的代码片段如下所示:

<form name="libraryForm">
  <div ng-repeat="book in vm.newBooksToAdd">

    <!-- ngForm directive allows to create forms within the parent form -->
    <ng-form name="bookForm">
      <div>
        <label>Book title</label>
        <input ng-model="book.title" type="text" name="title" required>
      </div>
      <div>
        <label>Author</label>
        <input ng-model="book.author" type="text" name="author" required>
      </div>
    </ng-form>
  </div>
</form>

在您的控制器中,您可以初始化要添加为vm.newBooksToAdd = [];的图书清单,并且只要您想要将新表单添加到新图书的表单列表中,只需vm.newBooksToAdd.push({})一个空对象。因此,您将向后端发送一组表示您要创建的书籍的对象。

在后端

现在,您需要覆盖视图的.create()方法,以允许一次创建多个实例,因为默认情况下它需要一个对象。您的观点可能如下所示:

class LibraryViewSet(views.ModelViewSet):
    ...

    def create(self, request):
        serializer = self.get_serializer(data=request.data, many=True)  # notice the `many` keywork argument here
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        return Response(serializer.data, status=status.HTTP_201_CREATED)

注意:如果您希望批量创建单个实例,则需要调整.create()方法检查request.data的数据类型。

注2:有一个django-rest-framework-bulk库可以在后端实现您想要的功能,但我没有尝试过,所以不能说它有什么坏或不好

祝你好运!