javascript - Angular.js 中的 Django 表单集等效项

标签 javascript python angularjs django django-rest-framework

Django 有 formsets ,其中多种形式可以在一个大形式中使用。假设我们可以添加一个例如图书馆使用同一书籍形式的重复形式设置多本书(提供作者和标题)。

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

最佳答案

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

在前端

创建 <form>在您的页面上,它将根据您的需要构建用户输入的数据。里面<form>元素,您需要使用 ngForm使多个表单的验证能够正确运行( here 很好地解释了 ngForm 的工作原理)。假设的代码片段如下所示:

<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>

在 Controller 中,您可以初始化要添加的图书列表为 vm.newBooksToAdd = [];每当您想将新表单添加到新书表单列表中时,只需 vm.newBooksToAdd.push({})一个空物体。因此,您将向后端发送代表您要创建的书籍的对象数组。

在后端

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

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 在后端实现你想要的库,但我没有尝试过,所以不能说它有什么不好或好的。

祝你好运!

关于javascript - Angular.js 中的 Django 表单集等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228035/

相关文章:

javascript - 模态错误....为正确的模态视图发送 id。如何做?

javascript - 在 react 中显示最小和最大长度表单验证错误?

python - python锁如何知道要锁定哪个资源或对象? (理论上)

php - 是否可以使用 iframe 跟踪来自第三方的 ip 或流量

javascript - 如何使用 JavaScript 检测我是否在缓存页面上

python - Python 3.4 上的 Flask Bug?如果应用程序包含相对导入,则开发服务器无法运行

python - 为什么我的 PyQt 代码在多线程时不能完全执行?

javascript - javascript中单页应用程序的主题支持

javascript - 变量未返回(未识别) - AngularJS

javascript - 为什么 ng-repeat 指令不起作用?