integrar enviar datos con python django forms django-forms django-request

python - enviar - Solicitud de acceso desde los formularios. Formulario para obtener datos de dB relacionados con el usuario



enviar datos de python a php (1)

Puede pasar la solicitud a su formulario cambiando su método __init__ esta manera:

class InformForm(forms.Form): ... def __init__(self, user=None,*args, **kwargs): super(InformForm, self).__init__(**kwargs) if user: self.fields[''somefield''] = forms.ChoiceField() self.fields[''somefield''].widget = forms.Select() self.fields[''somefield''].queryset = Someobject.objects.filter(User=user) ...

Si el usuario está vinculado a otro objeto en db por clave externa, obtendrá todos los valores de otro objeto como elementos seleccionados.

Además, al crear el formulario, puede pasar al usuario de la siguiente manera:

form= InformForm(user=request.user,data=request.POST)

Así que la tarea básica es: agregar el nombre y el texto de la plantilla a las choices en el widget ChoiceField with Selector al formulario utilizando los datos de dB vinculados solo al Usuario autenticado. Template es un modelo vinculado al usuario como ForeignKey .

Me gustaría acceder a los datos de solicitud (usuario) a través de la clase de formulario vinculada a la vista conectada como clase django.views.generic.View .

He consultado preguntas similares aquí: Curioso sobre get_form_kwargs en FormView

y aquí: Enviar objeto request.user a ModelForm desde la vista genérica basada en clases en Django

y aquí: Django: solicitud de acceso en la función clean de forms.py

Sin embargo, no tocan base con clases que no sean FormView . Y dado que se trata de soluciones bastante antiguas, tenía curiosidad de saber si hay un enfoque más probable para llegar a la request desde forms.Form class.

Aquí está mi código:

views.py

class InformFill(View): form_class = InformForm temlate_name = ''distrib_db/inform_fill.html'' def get(self, request): if request.user.is_authenticated(): form = self.form_class(None) return render(request, self.temlate_name, context={''form'': form}) else: return redirect(''distrib_db:login'') def post(self, request): if request.user.is_authenticated(): form = self.form_class(request.POST) if form.is_valid(): inform = Inform(flt_numbr=form.cleaned_data[''flight_number''], date=form.cleaned_data[''date''], template=form.cleaned_data[''text''], user=request.user) inform.save() date = form.cleaned_data[''date''] flt_numbr = form.cleaned_data[''flight_number''] try: emails, contacts = get_mail_cnt(date, flt_numbr) # inform = get_object_or_404(Inform, pk=request[''pk'']) paxdata = PaxData(inform=inform, emails='' ''.join(emails), contacts='' ''.join(contacts)) paxdata.save() return redirect(''/inform/{0}/''.format(inform.pk)) # ''distrib_db:detail'', context={''pk'': inform.id} except Exception as e: return render(request, ''distrib_db/sample.html'', context={''date'': date, ''flight_number'': flt_numbr, ''error'': e}) # return render(request, ''distrib_db/sample.html'', context={''date'': date, ''flt_numbr'': flt_numbr}) return render(request, self.temlate_name, context={''form'': form}) else: return redirect(''distrib_db:login'')

forms.py

class InformForm(forms.Form): flight_number = forms.CharField(5, widget=forms.TextInput()) date = forms.DateField(widget=forms.DateInput(attrs={''class'': ''datepicker''})) template = forms.ChoiceField(choices=templates, widget=forms.Select(attrs={''id'': ''select_box'', ''onchange'': ''javascript:changer();''})) text = forms.CharField(widget=forms.Textarea(attrs={''id'': ''txt_box'', ''class'': ''latin'', ''maxlength'': "160", ''onchange'': ''javascript:validateTextArea();''}))

En términos generales, me gustaría lograr algo así:

`class InformForm(forms.Form): def get_template_choices(self): templates = self.request.user.template_set.all() choices = [] for t in templates: choices.append((t.text, t.name)) return choices flight_number = forms.CharField(5, widget=forms.TextInput()) date = forms.DateField(widget=forms.DateInput(attrs={''class'': ''datepicker''})) template = forms.ChoiceField(choices=get_template_choices(), widget=forms.Select(attrs= {''id'': ''select_box'', ''onchange'': ''javascript:changer();''})) text = forms.CharField(widget=forms.Textarea(attrs={''id'': ''txt_box'', ''class'': ''latin'', ''maxlength'': "160", ''onchange'': ''javascript:validateTextArea();''}))`

Apreciaría cualquier enfoque, mb. Me falta conocimiento y hago preguntas a los novatos, lo siento.

Solo quiero obtener la solución python-way lugar de construir algunos js/jinja walk-arounds.

¡Gracias por tu tiempo!

#

Después de los comentarios de @ Daniel, hice algunos ajustes:

`class InformForm(forms.Form): def __init__(self, user=None, *args, **kwargs): if user: self.fields[''template''] = forms.ChoiceField(choices=tuple([(template.text, template.name) for template in user.template_set.all()]), widget=forms.Select(attrs={''id'': ''select_box'', ''onchange'': ''javascript:changer();''})) flight_number = forms.CharField(5, widget=forms.TextInput()) date = forms.DateField(widget=forms.DateInput(attrs={''class'': ''datepicker''})) # template = forms.ChoiceField(choices=templates, widget=forms.Select(attrs={''id'': ''select_box'', # ''onchange'': ''javascript:changer();''})) text = forms.CharField(widget=forms.Textarea(attrs={''id'': ''txt_box'', ''class'': ''latin'', ''maxlength'': "160", ''onchange'': ''javascript:validateTextArea();''}))`

Obtuvo un error AttributeError: ''InformForm'' object has no attribute ''fields''