Il existe un cas où vous souhaitez contrôler les éléments qui peuvent être sélectionnés en fonction de l'autorité de l'utilisateur connecté pour la zone de liste référencée par le maître.
↓ Un mémo expliquant comment enquêter et essayer d'utiliser le modèle et le formulaire comme échantillon.
models.py
class Book(models.Model):
name = models.charField('name',max_length=255)
forms.py
class SampleForm(forms.Form):
book = forms.ModelChoiceField(label='book',queryset=Book.objects.all())
Probablement le moyen le plus simple.
python
form = SampleForm()
form.fields['book'].queryset = Book.objects.filter(...)
__init__
du formulaireforms.py
class SampleForm(forms.Form):
book = forms.ModelChoiceField(label='book',queryset=Book.objects.none())
def __init__(self, queryset=None, *args, **kwargs):
super(SampleForm,self).__init__(*args,**kwargs)
if queryset :
self.fields['book'].queryset = queryset
python
form = SampleForm(queryset=Book.objects.filter(...))
Notez que self.fields
ne sera généré que si vous appelez super .__ init__
.
La procédure à suivre avec le jeu de requêtes par défaut dépend du rôle du formulaire.
Il est également possible d'implémenter que l'ensemble de requêtes lui-même n'est pas reçu, que seules les données utilisées pour la condition de filtre sont reçues et que l'ensemble de requêtes est généré côté formulaire.
forms.py
class SampleForm(forms.Form):
book = forms.ModelChoiceField(label='book',queryset=Book.objects.none())
def __init__(self, permission=None, *args, **kwargs):
super(SampleForm,self).__init__(*args,**kwargs)
self.fields['book'].queryset = self.get_book_list(permission)
def get_book_list(self, permission=None):
if not permission :
return Book.objects.none()
if permission == AAA :
query = Q(...)
elif permission == BBB :
query = Q(...)
#Écrivez autant que vous en avez besoin...
return Book.objects.filter(query)
Ce que vous faites est essentiellement la même chose.
Le fait est que vous pouvez remplacer Form.fields ['field_name']. Queryset
après avoir traité Form .__ init__
.
En jouant avec Form.fields
, vous pouvez modifier divers attributs d'autres champs après la création du formulaire.
Est-il possible d'ajouter / supprimer le champ lui-même?
Recommended Posts