angular.js 中的 Django formset 等效项

Posted

技术标签:

【中文标题】angular.js 中的 Django formset 等效项【英文标题】:Django formset equivalent in angular.js 【发布时间】:2016-07-13 16:29:46 【问题描述】:

Django 有formsets,可以在一个大表单中使用多个表单。因此,假设可以添加一个例如图书馆 formset 多本书(提供作者和标题)使用相同书籍形式的重复。

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

【问题讨论】:

为什么要混合使用 Angular 和 django? 【参考方案1】:

您可以分两步实现:

在前端

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

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

祝你好运!

【讨论】:

以上是关于angular.js 中的 Django formset 等效项的主要内容,如果未能解决你的问题,请参考以下文章

使用angular.js获取form表单中的信息

django、cordova、ionic 和 angular.js 的 CORS 问题

Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?

Django和Angular.js模板标签冲突的解决方式

Django Rest Framework/Angular JS Preflight 选项

我如何在 Django 中使用 Angular JS?我面临很多问题[关闭]