关于在django的modelform中设置默认修改字段
最近在写一个crm系统,在用户注册后,展示负责人,但是并不希望用户可以修改它。查阅了网上的很多资料,大多都是一知半解,无奈修改了一晚上,最终解决。
在django的中间件里,我们可以对POST发来的数据进行修改,即使用户修改也是无效的,这是我目前想到的最好办法。(声明一下,为了提高io效率,防止多个表单同时修改造成的困难,每一个model我都是单独建立的,没有设置外键字段,只有pk)
这是我的用户model,负责人一旦注册,不可修改或修改无效 class UserInfo(models.Model): uid = models.AutoField(primary_key=True) username = models.CharField(max_length=15,unique=True, help_text='名字必须唯一') password = models.CharField(max_length=15) email = models.EmailField() telephone = models.CharField(max_length=11) fuzeren = models.CharField(max_length=20,unique=True,blank=True, null=True,) def __str__(self): return self.username
我们可以在form中进行提示,即使修改了也是无效的 class DianMianModelForm(forms.ModelForm): class Meta: model = models.DianMian fields='__all__' labels = { 'fuzeren':'负责人(默认为初始注册负责人,无法修改)', 'mingcheng':'名称', 'telephone':'电话', 'weizhi':'位置', 'is_active':'营业ing?(填是或否)', }
在中间件里对所有的POST请求进行修改(需要单独的话,可以在views里面进行处理) class UserAuth(MiddlewareMixin): def process_request(self,request): white_list = [reverse('login'),reverse('register'),] if request.path in white_list: return request.POST = request.POST.copy() request.POST['fuzeren'] = request.session.get('fuzeren') user_uid = request.session.get('user_uid') if user_uid: user_obj = models.UserInfo.objects.get(uid=request.session.get('user_uid')) # 将当前登录用户对象作为一个属性,封装给了request request.user_obj = user_obj return else: return redirect('login')