关于在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')

 

posted @ 2021-05-17 11:52  Full-Stack~  阅读(282)  评论(0编辑  收藏  举报