以超级用户提交表单与普通用户

时间:2017-09-04 13:03:31

标签: python django

在我的django应用程序中,我有一个Myuser(User)课程。它继承了User类。 创建新用户时,将弹出Myuser表。

myusers.py

class Myuser(User):
    address = models.CharField(max_length=40)
    pobox = models.CharField(max_length=40)

models.py

class Someclass(models.Model):
    objectid    = models.IntegerField()
    objecttype  =  models.CharField(max_length=200)
    created     =  models.DateTimeField(default=timezone.now)
    modified    =  models.DateTimeField(auto_now=True)

class Someotherclass(Someclass):
    status = models.IntegerField(default=0,)
    name   =  models.CharField(max_length=200)
  created =  models.DateTimeField(default=timezone.now)
    modified =  models.DateTimeField(auto_now=True)
  user = models.ForeignKey(User)

forms.py

class SomeotherclassForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request")
        self.user = kwargs.pop('user')
        self.app = kwargs.pop('app')
        self.table = kwargs.pop('table')
        self.mytype = kwargs.pop('mytype')
        initial = kwargs.get('initial', {})
        super(SomeotherclassForm, self).__init__(*args, **kwargs)

create.py

class  DataCreate(CreateView):
  @method_decorator(login_required)
  def dispatch(self, *args, **kwargs):
     #some code here not relevant at all

  def get_form_kwargs(self):
        kwargs = super(DataCreate, self).get_form_kwargs()
        objectid = self.request.GET.get('objectid',None)
        objecttype = self.request.GET.get('objecttype',None)
        kwargs.update({'mytype': objecttype})
        kwargs.update({'request': self.request})
        kwargs.update({'user': self.request.user})
        kwargs.update({'app': self.app})
        kwargs.update({'table': self.kwargs['table'].lower()})
        return kwargs

  def form_valid(self, form):
        obj = form.save(commit=False)
        group = ''
        if not self.request.user.is_superuser:
            group = MyUser.objects.get(user_ptr_id=self.request.user.pk)
        else:
            groups = self.request.user.groups.all()    
        if  self.kwargs['table'] == 'Myprotocol':
                obj = form.save(commit=False)
                table = eval(self.request.GET.get('objecttype',None).title()).objects.get(pk=int(self.request.GET.get('objectid',None)))

                obj.objectid = table.pk
                obj.objecttype = table.__class__.__name__.lower()
                obj.user_id = self.request.user.pk
                obj.save()            
        else:
            obj = form.save()
        if self.request.POST.get('is_popup'):
            check = int(self.kwargs['is_list'])
            if self.kwargs['table'] == 'Someclass':
                popup = 1
                a = checkPopup2(obj,check,popup,obj.pk)
            else:
                a = checkPopup(obj,check)

            return a
        else:
            return super(DataCreate, self).form_valid(form)

当我以普通用户身份登录时,一切正常。 当我以超级用户身份登录时,我得到表单错误,即objecttype,objectid和user未填充。 在我尝试对其进行故障排除时,我意识到当我以超级用户身份登录时,它无法访问form_valid()功能。 我无法弄清楚为什么会这样。 有关如何排除故障的任何建议或建议吗?

0 个答案:

没有答案