parejas-forms2.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from django import forms
  2. from django.contrib.auth import get_user_model
  3. from .models import Reserva
  4. User = get_user_model()
  5. class ReservaForm(forms.ModelForm):
  6. acompanante = forms.ModelChoiceField(
  7. queryset=User.objects.none(),
  8. required=False,
  9. label="Acompañante"
  10. )
  11. class Meta:
  12. model = Reserva
  13. fields = ['acompanante']
  14. def __init__(self, *args, **kwargs):
  15. evento = kwargs.pop('evento', None)
  16. usuario = kwargs.pop('usuario', None)
  17. super().__init__(*args, **kwargs)
  18. if evento and evento.para_parejas:
  19. # Ordenar alfabéticamente por nombre y excluir al propio usuario
  20. self.fields['acompanante'].queryset = (
  21. User.objects.exclude(id=usuario.id)
  22. .order_by('first_name', 'last_name', 'username')
  23. )
  24. # Mostrar el nombre completo o username en las opciones
  25. self.fields['acompanante'].label_from_instance = (
  26. lambda obj: f"{obj.get_full_name() or obj.username}"
  27. )
  28. else:
  29. # Si el evento no es para parejas, quitar el campo
  30. self.fields.pop('acompanante')