Por favor, esto como una pregunta de consideración. Tal vez alguien use una de las soluciones a continuación.Usuario de Django HiddenInput vs guardar directamente en vistas con Vistas basadas en clase
Tengo un par de modelos que contienen un campo ForeignKey(User)
. Mis vistas de creación basadas en clases se derivan del genérico CreateView
.
Hay dos opciones para guardar el usuario asociado al añadir un nuevo objeto:
guardar el formulario en las vistas reemplazando el método
form_valid
; ello no expongauser_id
(y otros que no se mencionan aquí los datos que no deben ser expuestos)class CreateOfferView(CreateView): model = Offer form_class = SomeModelFormWithUserFieldExcluded def form_valid(self, form): instance = form.save(commit=False) instance.user = self.request.user instance.save()
guardar el formulario con id de usuario almacenados (y expuesto) en un campo oculto. Aquí está la parte difícil. Hay más modelos con campo de usuario ... así que al crear un formulario, necesito llenar el campo de usuario con el usuario inicial (actualmente conectado) y también necesito ocultar ese campo. Para este propósito he usado mi
OwnFormMixin
class OwnFormMixin(object): def get_form(self, form_class): form = super(OwnFormMixin, self).get_form(form_class) form.fields['user'].widget = forms.HiddenInput() def get_initial(self): initial = super(OwnFormMixin, self).get_initial() initial['user'] = self.request.user.pk #I could also do this in get_form() with form.fields['user'].initial class CreateOfferView(OwnFormMixin, CreateView): model = Offer form_class = SomeModelFormWithAllFields
Hay más CreateXXXView
utilizando el OwnFormMixin
..
¿Cómo guardar los datos de usuario en los formularios?
¿Oculta o no guardando directamente en sus puntos de vista? ¿Cuáles son los pros/contras?
¿Por qué no utiliza request.user en la validación? ¿Existe la posibilidad de responder POST a de otro usuario? Por qué incluso exponer los datos de usuario de django en forma o cualquier parte visible. Es una vulnerabilidad potencial ... – garmoncheg