Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果用户经过身份验证,则不在表单中显示字段_Python_Django - Fatal编程技术网

Python 如果用户经过身份验证,则不在表单中显示字段

Python 如果用户经过身份验证,则不在表单中显示字段,python,django,Python,Django,如果用户经过身份验证,我不想显示一个表单字段 如果没有请求,我尝试了。user.is\u authenticated(): 但它不起作用 def create_event(request): if not request.user.is_authenticated(): CreateEventForm.base_fields['owner_email'] = forms.EmailField(required=True) event_form = CreateEv

如果用户经过身份验证,我不想显示一个表单字段

如果没有请求,我尝试了
。user.is\u authenticated():
但它不起作用

def create_event(request):
    if not request.user.is_authenticated():
        CreateEventForm.base_fields['owner_email'] = forms.EmailField(required=True)
    event_form = CreateEventForm(request.POST or None, prefix='event')
    context = {
        'event_form': event_form,
    }
    if event_form.is_valid():
        event = event_form.save(commit=False)
        if request.user.is_authenticated():
            event.registered_owner = request.user
        else:
            event.owner_email = event_form.cleaned_data.get('owner_email')
        event = event_form.save()
        return HttpResponseRedirect('/event-%s' %event.id)
    return render(request, 'create_event.html', context)
表单中的表单.py

class CreateEventForm(forms.ModelForm):
    class Meta:
        model = Event
        fields = ['title', 'description', 'location', 'duaration', 'private']

您不应修改
基本字段
;这是一个类属性,所以一旦您向它添加了一些东西,它就会出现在所有表单实例中,直到您显式地删除它为止

相反,将此逻辑移到表单本身的
\uuuu init\uuu
方法中

class CreateEventForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        is_authenticated = kwargs.pop('is_authenticated', False)
        super(CreateEventForm, self).__init__(*args, **kwargs)
        if is_authenticated:
            self.fields['owner_email'] = forms.EmailField(required=True)
现在,在您的视图中,您需要将该参数传递给表单:

event_form = CreateEventForm(request.POST or None, prefix='event', is_authenticated=request.user.is_authenticated())

您不应修改
基本字段
;这是一个类属性,所以一旦您向它添加了一些东西,它就会出现在所有表单实例中,直到您显式地删除它为止

相反,将此逻辑移到表单本身的
\uuuu init\uuu
方法中

class CreateEventForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        is_authenticated = kwargs.pop('is_authenticated', False)
        super(CreateEventForm, self).__init__(*args, **kwargs)
        if is_authenticated:
            self.fields['owner_email'] = forms.EmailField(required=True)
现在,在您的视图中,您需要将该参数传递给表单:

event_form = CreateEventForm(request.POST or None, prefix='event', is_authenticated=request.user.is_authenticated())

“不工作”意味着什么?错误?无效结果?如果用户未通过身份验证,则仍显示owner_电子邮件字段`if not request.user.is_authenticated():CreateEventForm.base_字段['owner_email']=forms.EmailField(required=True)`这是怎么回事?什么是“不工作”呢?错误?无效结果?如果用户经过身份验证,则仍显示owner\u电子邮件字段`if not request.user.is\u authenticated():CreateEventForm.base\u字段['owner\u email']=forms.EmailField(required=True)`这怎么办?