J'essaie de créer un menu déroulant personnalisé pour un modelForm. En ce moment, la forme du modèle montre juste toutes les unités sans hiérarchie. Je voudrais la forme d'une boîte de sélection comme parent/enfant ordonné par le collège puis par leurs services sous euxFournir Custom Select sur ModelForm
<select>
<option value="10000">COLLEGE A</option>
<option value="10001"> DEPT A</option>
<option value="10002"> DEPT B</option>
<option value="20000">COLLEGE B</option>
<option value="20001"> DEPT C</option>
.....
</select>
J'ai un modèle de toutes les « unités » sur notre campus. Si le parent est None alors c'est un collège. Chaque département pointe vers un collège.
class Units(models.Model):
unit_name = models.CharField(max_length=255)
enabled = models.BooleanField(default=True)
parent = models.ForeignKey("self", null=True)
def __str__(self):
if self.parent:
return self.parent.unit_name + ': ' + self.unit_name
else:
return self.unit_name
J'abstraire ma classe User comme suit afin que tous mes utilisateurs peuvent avoir une unité associée
class Profile(AbstractUser):
associated_unit = models.ForeignKey(Units)
...........
Sur l'écran qui édite l'utilisateur que je veux la liste déroulante de associated_unit à la liste, il hiérarchie comme ci-dessus et pas si linéaire. C'est ce que j'ai obtenu à ce jour pour que le formulaire liste uniquement les unités "activées".
forms.py
class UserForm(ModelForm):
class Meta:
model = Profile
fields = ('id', 'first_name', 'last_name', 'username', 'is_active', 'associated_unit')
def __init__(self, **kwargs):
super(UserForm, self).__init__(**kwargs)
self.fields['associated_unit'].queryset = Units.objects.filter(enabled=True).order_by('parent__unit_name', 'unit_name')
Comment puis-je faire pour créer une coutume sélectionner déroulant comme indiqué ci-dessus? Toute aide est appréciée. Fatigué de l'expérimentation et de la recherche: D
Pas encore sorti du bois. Maintenant, je reçois cette erreur lorsque je sauvegarde le formulaire. Retour à la planche à dessin. Impossible d'affecter "'12006" ":" L'unité Profile.associated "doit être une instance" Unités ". –