Il caso particolare che ho è come questo:Come passare il parametro iniziale all'istanza ModelForm di django?
Ho un modello di transazione, con i campi: from
, to
(entrambi sono ForeignKey
s per auth.User
modello) e amount
. Nel mio modulo, vorrei presentare i campi dell'utente 2 da compilare: amount
e from
(to
verrà automaticamente impostato all'utente corrente in una funzione di visualizzazione).
Il widget predefinito per presentare un ForeignKey
è una casella di selezione. Ma quello che voglio arrivare, è limitare le scelte solo ai membri del queryset user.peers
(così le persone possono solo registrare le transazioni con i loro coetanei e non venire inondati da tutti gli utenti del sistema).
Ho provato a cambiare il ModelForm a qualcosa di simile:
class AddTransaction(forms.ModelForm):
from = ModelChoiceField(user.peers)
amount = forms.CharField(label = 'How much?')
class Meta:
model = models.Transaction
Ma sembra che devo passare il set di query di scelte per ModelChoiceField
proprio qui - in cui non ho un accesso al web request.user
oggetto.
Come limitare le scelte in un modulo a quelle dipendenti dall'utente?
Grazie mille! Questo mi ha davvero aiutato. – kender
Dall'interno della classe Form è possibile accedere all'istanza del modello tramite 'self.instance'. Ricorda che l'istanza sarà piuttosto vuota quando aggiungi/crea un nuovo oggetto. – JCotton
Un po 'più semplice è la cattura di systemid come argomento regolare nel __init __() passando ** kwargs direttamente attraverso: 'def __init __ (self, systemid, * args, ** kwargs): super (BackupForm, self) .__ init __ (* args, ** kwargs) ' – JCotton