Cela doit être une exigence commune, mais rien de ce que j'ai trouvé sur SO ou dans les documentations Django qui fonctionne pour moi. Je suis vraiment nouveau à Django. Mon problème: J'ai besoin de changer la liste des zones qui sont présentées dans une liste déroulante de formulaire en fonction de la société qui a la propriété de la zone.Liste déroulante Modifier/Filtrer basée sur la propriété
Dans mon application: Comptes (i.e. utilisateurs) sont membres de la Société. Une entreprise gère une zone. Dans la zone sont un certain nombre de routes. Les itinéraires peuvent être ajoutés/mis à jour/supprimés ou attribués à différentes zones par la Société.
donc sur mes formes Je veux faire en sorte que seules les zones qui appartiennent à une société sont affichés dans la liste déroulante. Essentiellement, un utilisateur sélectionne une zone, puis les routes CRUD associées à la zone.
class Company(models.Model):
name = models.CharField(...
account_number = models.CharField(...
...
class Account(models.Model):
name = models.OneToOneField(User...
company = models.ForeignKey(Company)
...
class Area(models.Model):
owner = models.ForeignKey(Company)
number = modes.PositiveIntegerField(...
class Route(models.Model):
owner = models.ForeignKey(Company)
area = models.ForeignKey(Area)
Dans forms.py
class RouteCreateForm(forms.ModelForm):
class Meta:
model= Route
fields= [
'area',
'route_number',
...
]
Ajout:
self.fields['area'].queryset = Area.objects.filter(owner_id = 2)
fournit le filtrage correct mais bien sûr n'est pas dynamique.
J'ai beaucoup de variations sur:
def __init__(self, *args, **kwargs):
??how to pass in user to ultimately get to owner_id??
self.fields['area'].queryset = Area.objects.filter(owner_id = owner_id)
mais ne peut pas obtenir le milieu droit. J'ai aussi essayé en passant « utilisateur », mais les seuls résultats dans un TypeError à/compte/setup/itinéraire/créer initialisation() manquant 1 nécessaire argument de position: « utilisateur »