1. Model
class user_list(models.Model):
user_name=models.CharField(unique=True, max_length=40)
full_name=models.CharField(unique=True, max_length=40)
email_address=models.CharField(max_length=40)
dept_list=models.ForeignKey('dept_list', on_delete=None, to_field='id', )
regdate=models.DateField(auto_now=True)
resigndate=models.DateField(blank=True)
lastupdate = models.DateField(blank=True)
user_status=models.CharField(max_length=40, default='active')
remark = models.CharField(max_length=40, default='--')
class Meta:
ordering = ('full_name',)
def __str__(self):
return self.full_name
class dept_list(models.Model):
bl_list = models.ForeignKey('bl_list',to_field='id',on_delete=None,default=2)
dept_name = models.CharField(max_length=45)
dept_leader = models.CharField(max_length=45)
def __str__(self):
return self.dept_name
2.ModelForm
class UserModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs, ):
#这里从**kwargs 中pop出实例传入的request
self.request = kwargs.pop("request")
#这里从实例传入request中的user的officename
officename = self.request.user.adm_info.site.officename
super(UserModelForm, self).__init__(*args, **kwargs, )
#这里要从参加数dict中判断是否是实例,在视图中post
if 'instance' in kwargs.keys():
print(kwargs['instance'])
#禁止在前端页面中修改user_name的值
self.fields['user_name'].disabled = True
#从dept_list model中返回记录初始的dept_name和满足条件(dept_name中包含officename)的记录,一般是用在改用户的记录
self.fields['dept_list'].queryset = dept_list.objects.filter(
Q(dept_name=self.instance.dept_list) | Q(dept_name__icontains=officename))
#如果在视中是GET,运行下面,新建用户的时候使用
else:
self.fields['dept_list'].queryset = dept_list.objects.filter(dept_name__icontains=officename)
3. views
@csrf_exempt
@login_required(login_url='/account/login')
def useredit(request, id):
userobj = user_list.objects.get(id=id)
if request.method == 'GET':
#这里的request 是向ModelForm传入request.user
obj = UserModelForm(instance=userobj, request=request)
if request.method == 'POST':
#这里的request 是向ModelForm传入request.user
obj = UserModelForm(request.POST, instance=userobj,request=request) #
print(obj.is_valid()) # 这是方法,别忘记了加括号
print(obj.cleaned_data)
print(obj.errors)
if obj.is_valid():
#dept_name=
#print(obj.cleaned_data.get('dept_name'))
obj.save()
messages.info(request,obj.data.get('full_name') +'保存成功!')
return HttpResponseRedirect('/deviceman/display_user')
else:
print(obj.errors.as_json())
return render(request, "useredit.html", {'obj': obj, 'acton': 'useredit', 'modelname': '-编辑user', 'id': id})