Si prega di considerare questo come una domanda. Forse qualcuno utilizzerà una delle soluzioni qui sotto.Utente Django NascostoInput vs. salvataggio diretto nelle viste con viste basate sulle classi
Ho un paio di modelli che contengono un campo ForeignKey(User)
. Le mie viste create basate sulla classe derivano dal generico CreateView
.
Ci sono due opzioni per salvare l'utente associato quando si aggiunge un nuovo oggetto:
Salvare la forma nelle viste Di override del metodo
form_valid
; questo non esponeuser_id
(e altri non menzionati qui i dati che non dovrebbero essere esposti)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()
Salvare il modulo con ID utente memorizzato (e vista) in un campo nascosto. Ecco la parte difficile. Ci sono più modelli con campo utente ... quindi quando si crea un modulo ho bisogno di riempire il campo utente con l'utente iniziale (attualmente connesso) e inoltre ho bisogno di rendere quel campo nascosto. A tal fine ho usato il mio
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
Non ci sono più CreateXXXView
utilizzando il OwnFormMixin
..
Come si fa a salvare i dati utente nei moduli?
Nascosto rispetto al salvataggio direttamente nelle visualizzazioni? Cosa sono i pro/contro?
Perché non usi request.user durante la convalida? C'è la possibilità di rispondere a POST a da un altro utente? Perché persino esporre qualsivoglia correlazione con i dati utente di django in forma o in qualsiasi parte visibile. È una potenziale vulnerabilità ... – garmoncheg