Django中如何让表单自动关联当前登录用户的User外键
解决Django自动关联当前登录用户到Equipo模型的问题
要实现自动关联当前登录用户、隐藏用户选择表单,同时支持单用户创建多支球队,只需修改表单定义和视图逻辑两步即可:
1. 修改ModelForm,隐藏user字段
因为不需要用户手动选择用户,在表单中排除user字段,只保留需要用户输入的内容:
from django import forms from django.forms import ModelForm from .models import Equipo class CrearFT(ModelForm): class Meta: model = Equipo fields = ['Fname', 'RUT'] # 仅展示需要用户填写的字段 # 也可以用 exclude = ['user'] 达到同样效果
2. 修改视图,自动关联当前登录用户
先限制仅登录用户可访问该页面,再在表单验证通过后,手动将当前登录用户绑定到球队实例:
from django.shortcuts import render, redirect from django.urls import reverse from django.contrib.auth.decorators import login_required from .forms import CrearFT @login_required # 限制仅登录用户可访问 def dashboard(request): crear_ft = CrearFT() if request.method == 'POST': crear_ft = CrearFT(data=request.POST) if crear_ft.is_valid(): # 先创建实例但不保存到数据库 equipo = crear_ft.save(commit=False) # 关联当前登录用户 equipo.user = request.user # 最终保存到数据库 equipo.save() return redirect(reverse('dashboard')+'?ok') else: return redirect(reverse('dashboard')+'?error') return render(request, 'vets/dashboard.html', {'form':crear_ft})
关键说明
@login_required装饰器:避免未登录用户访问,防止request.user为匿名用户导致的错误save(commit=False):生成Equipo模型实例但暂不写入数据库,方便手动补充user字段- 模型外键默认支持一对多关系:一个User可以关联多个Equipo实例,天然满足单用户创建多支球队的需求
内容的提问来源于stack exchange,提问作者Lucho
相关产品推荐
相关产品推荐

