Le cas particulier je ressemble à ceci:Comment passer le paramètre initial à l'instance ModelForm de django?
J'ai un modèle de transaction, avec des champs: from
, to
(les deux sont ForeignKey
s au modèle auth.User
) et amount
. Dans mon formulaire, je voudrais présenter les champs de l'utilisateur 2 à remplir: amount
et from
(to
sera automatiquement défini à l'utilisateur actuel dans une fonction de vue).
Le widget par défaut pour présenter un ForeignKey
est un select-box. Mais ce que je veux y arriver, c'est de limiter les choix aux membres de Qetyset user.peers
seulement (ainsi les gens peuvent seulement enregistrer des transactions avec leurs pairs et ne pas être inondés avec tous les utilisateurs du système).
J'ai essayé de changer le ModelForm à quelque chose comme ceci:
class AddTransaction(forms.ModelForm):
from = ModelChoiceField(user.peers)
amount = forms.CharField(label = 'How much?')
class Meta:
model = models.Transaction
Mais il semble que je dois passer le queryset de choix pour ModelChoiceField
ici - où je n'ai pas accès à Internet request.user
objet.
Comment puis-je limiter les choix dans un formulaire à ceux qui dépendent de l'utilisateur?
Merci beaucoup! Cela a vraiment aidé. – kender
Depuis l'intérieur de la classe Form, vous pouvez accéder à l'instance Model via 'self.instance'. Souvenez-vous que l'instance sera plutôt vide lors de l'ajout/création d'un nouvel objet. – JCotton
Un peu plus simple est d'attraper systemid comme un argument normal dans votre __init __() tout en passant ** kwargs directement: 'def __init __ (self, systemid, * args, ** kwargs): super (BackupForm, self) .__ init __ (* args, ** kwargs) ' – JCotton