|
|
@@ -0,0 +1,36 @@
|
|
|
+from django import forms
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
+from .models import Reserva
|
|
|
+
|
|
|
+User = get_user_model()
|
|
|
+
|
|
|
+class ReservaForm(forms.ModelForm):
|
|
|
+ acompanante = forms.ModelChoiceField(
|
|
|
+ queryset=User.objects.none(),
|
|
|
+ required=False,
|
|
|
+ label="Acompañante"
|
|
|
+ )
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ model = Reserva
|
|
|
+ fields = ['acompanante']
|
|
|
+
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
+ evento = kwargs.pop('evento', None)
|
|
|
+ usuario = kwargs.pop('usuario', None)
|
|
|
+ super().__init__(*args, **kwargs)
|
|
|
+
|
|
|
+ if evento and evento.para_parejas:
|
|
|
+ # Ordenar alfabéticamente por nombre y excluir al propio usuario
|
|
|
+ self.fields['acompanante'].queryset = (
|
|
|
+ User.objects.exclude(id=usuario.id)
|
|
|
+ .order_by('first_name', 'last_name', 'username')
|
|
|
+ )
|
|
|
+
|
|
|
+ # Mostrar el nombre completo o username en las opciones
|
|
|
+ self.fields['acompanante'].label_from_instance = (
|
|
|
+ lambda obj: f"{obj.get_full_name() or obj.username}"
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ # Si el evento no es para parejas, quitar el campo
|
|
|
+ self.fields.pop('acompanante')
|