Quiero acceder al objeto de solicitud en FormView y obtener la IP del cliente. Como todos sabemos, no es muy confiable colocar un campo oculto en el formulario html porque el usuario puede cambiarlo si así lo desea. Por lo tanto, elijo hacerlo de espaldas. Uso ModelForm como form_class de FormView y excluyo el campo ip en el formulario. Aquí viene el problema, sé cómo agregar el campo ip dinámicamente. No siempre puedo guardar el modelo con éxito. Aquí está mi código.
models.py
class MyModel(models): ip = models.GenericIPAddressField() [...] forms.py
class MyForm(forms.ModelForm): class Meta: model = MyModel exclude = ['ip'] views.py
class MyView(FormView): form_class = MyForm [...] Intenté cambiar el método psot() y agregué manualmente el campo ip de request.POST pero descubrí que no sabía cómo pasar la instancia del formulario... Pasé toda la noche para resolver este problema y finalmente falló ... Tanques por ayudar de antemano ...
Gracias Daniel por responder a esta pregunta.
Cambié mi código a esto:
views.py
class PollView(FormView): template_name = 'poll.html' form_class = PollForm success_url = '/thanks/' def get_ip(self,request): if request.META.has_key('HTTP_X_FORWARDED_FOR'): ip = request.META['HTTP_X_FORWARDED_FOR'] else: ip = request.META['REMOTE_ADDR'] return ip def form_valid(self, form): form.instance.ip = self.get_ip(self.request) super(PollView,self).form_valid(form)pero tengo un error:
ValueError at / The view poll.views.PollView didn't return an HttpResponse object. It returned None instead.