Django有formsets,其中多个表单可用于一个大表单。所以,让我们说一个人可以添加例如使用相同书籍形式的重复的图书馆formset mulitple书籍(提供作者和标题)。
如何使用Angular.js和Django Rest Framework实现相同的功能?我是Angular.js和Django Rest Framework的新手,需要一些指导,如何能够为一个大型表格(例如我的库)中的给定模型动态添加更多表单(例如书籍)并将其保存在Django后端。
答案 0 :(得分:2)
您可以通过两个步骤实现此目的:
在您的页面上创建一个<form>
,用于根据需要构建用户输入的数据。在<form>
元素中,您需要将ngForm
用于多种形式&#39;验证行为正确(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>
在您的控制器中,您可以初始化要添加为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
库可以在后端实现您想要的功能,但我没有尝试过,所以不能说它有什么坏或不好