Django M2M表单保存“通过”表

Django M2M表单保存“通过”表,第1张

Django M2M表单保存“通过”表

如果使用正常的m2m关系(不通过中间表),则可以替换:

membership = Membership(member = HERE SELECtED ITEMS FROM FORM,classroom=new_obj)membership.save()

form.save_m2m()

但是,在使用中间表的情况下,你需要手动处理POST数据并创建具有所有必填字段的Membership对象(类似问题)。最基本的解决方案是将视图更改为:

def save_classroom(request):    if request.method == 'POST':        form = ClassroomForm(request.POST, request.FILES)        if form.is_valid():new_obj = form.save(commit=False)new_obj.user = request.user new_obj.save()for member_id in request.POST.getlist('members'):     membership = Membership.objects.create(member_id = int(member_id), classroom = new_obj)return HttpResponseRedirect('/')    else:        form = ClassroomForm()    return render_to_response('save_classroom.html', locals())

请注意如何 *** 作request.POST(.getlist)。这是因为post和get是具有某些含义的QueryDict对象(request.POST [‘members’]将始终返回一个对象!)。

你可以修改此代码以使其更可靠(错误处理等),并且更详细,例如:

member = get_object_or_404(User, pk = member_id)membership = Membership.objects.create(member = member , classroom = new_obj)

但是请注意,你正在循环中执行一些数据库查询,这通常不是一个好主意(就性能而言)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5059499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存