Django创建Car模型实例时如何自动关联当前登录的内置User模型用户
实现方案
你只需要修改create_car视图函数里表单验证通过后的保存逻辑即可,具体实现逻辑如下:
- 表单验证通过后,先调用
form.save(commit=False),该方法会生成Car模型实例但不会立刻写入数据库 - 手动给返回的Car实例的
user字段赋值为当前登录用户request.user - 再调用实例的
save()方法将完整数据写入数据库 - 额外补充:给视图加
@login_required装饰器,确保只有登录用户才能访问提交页面,避免未登录状态下request.user不存在引发报错
修改后的views.py完整代码:
from django.contrib.auth.decorators import login_required from django.contrib import messages from django.shortcuts import redirect, render from .forms import CreateCarForm # 登录验证装饰器,未登录用户会自动跳转到登录页 @login_required def create_car(request): form = CreateCarForm() if request.method == "POST": form = CreateCarForm(request.POST, request.FILES) if form.is_valid(): # 拿到未写入数据库的Car实例 car = form.save(commit=False) # 赋值当前登录用户 car.user = request.user # 保存完整数据到数据库 car.save() messages.success(request, 'Car was Created') return redirect('create_car') context = {'form': form} return render(request, 'dashboard/create_car.html', context)
原理解释:commit=False是Django ModelForm内置的参数,专门用于需要在保存前补充模型字段值的场景,你现有的表单已经通过exclude排除了user字段,不需要额外修改表单代码即可正常运行。
内容的提问来源于stack exchange,提问作者feher007
相关产品推荐
相关产品推荐

