如何创建一个新的多对多对象并将其保存到一个视图中的模型
How to create a new manytomany object and save it to a model in one view
我有一个包含 2 个多对多字段的模型 repairOrders:
class RepairOrder(models.Model):
>>>
labor = models.ManyToManyField(Labor)
parts = models.ManyToManyField(Parts)
我显示了 repairOrder 并有一个按钮可以使用 Labor modelForm 创建一个新的 labor 对象。我想要发生的是在创建该对象之后,我希望将它添加到 RepairOrder 的 manytomany 字段中。我如何在视图中定义它?
这是我现在拥有的:
def repairOrder_detail(request, pk):
if request.method == "POST":
form = laborForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('repairOrder_detail', pk=pk)
else:
repairs = get_object_or_404(RepairOrder, pk=pk)
form = repairOrderForm()
labor = laborForm()
return render(request, 'repairOrders/repairOrder_detail.html', {'repairs': repairs, 'form': form, 'labor': labor})
现在我可以根据需要创建任意数量的 labor obj,但它们不会添加到 repairOrder 模型中。我不知道我需要调用什么来将 labor 实例保存到 repairOrder.labor 字段。我希望这一切都为最终用户一步完成。
您应该首先获取 RepairOrder
实例,而不是在 else 语句中。然后你可以向它添加 Labor
个对象。
def repairOrder_detail(request, pk):
form = laborForm(request.POST or None)
form = repairOrderForm()
repairs = get_object_or_404(RepairOrder, pk=pk)
if request.method == "POST":
if form.is_valid():
post = form.save(commit=False)
post.save()
repairs.labor.add(post) # <- NEW
return redirect('repairOrder_detail', pk=pk)
return render(request, 'repairOrders/repairOrder_detail.html',
{'repairs': repairs, 'form': form, 'labor': labor})
我有一个包含 2 个多对多字段的模型 repairOrders:
class RepairOrder(models.Model):
>>>
labor = models.ManyToManyField(Labor)
parts = models.ManyToManyField(Parts)
我显示了 repairOrder 并有一个按钮可以使用 Labor modelForm 创建一个新的 labor 对象。我想要发生的是在创建该对象之后,我希望将它添加到 RepairOrder 的 manytomany 字段中。我如何在视图中定义它?
这是我现在拥有的:
def repairOrder_detail(request, pk):
if request.method == "POST":
form = laborForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('repairOrder_detail', pk=pk)
else:
repairs = get_object_or_404(RepairOrder, pk=pk)
form = repairOrderForm()
labor = laborForm()
return render(request, 'repairOrders/repairOrder_detail.html', {'repairs': repairs, 'form': form, 'labor': labor})
现在我可以根据需要创建任意数量的 labor obj,但它们不会添加到 repairOrder 模型中。我不知道我需要调用什么来将 labor 实例保存到 repairOrder.labor 字段。我希望这一切都为最终用户一步完成。
您应该首先获取 RepairOrder
实例,而不是在 else 语句中。然后你可以向它添加 Labor
个对象。
def repairOrder_detail(request, pk):
form = laborForm(request.POST or None)
form = repairOrderForm()
repairs = get_object_or_404(RepairOrder, pk=pk)
if request.method == "POST":
if form.is_valid():
post = form.save(commit=False)
post.save()
repairs.labor.add(post) # <- NEW
return redirect('repairOrder_detail', pk=pk)
return render(request, 'repairOrders/repairOrder_detail.html',
{'repairs': repairs, 'form': form, 'labor': labor})