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)`这怎么办?