Advertisement
losvilos

forms

Feb 26th, 2025
234
0
20 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.21 KB | Help | 0 0
  1. from django import forms
  2. from .models import Cliente
  3. from .models import Contrato,Servicio, Direccion
  4.  
  5.  
  6. class ClienteForm(forms.ModelForm):
  7.     class Meta:
  8.         model = Cliente
  9.         fields = '__all__'  # Incluye todos los campos del modelo
  10.         # O puedes especificar los campos individualmente:
  11.         # fields = ['documento', 'nombre', 'apellido_paterno', ...]
  12.  
  13.     def clean_documento(self):
  14.         documento = self.cleaned_data.get("documento")
  15.         if Cliente.objects.filter(documento=documento).exists():
  16.             raise forms.ValidationError("El número de documento ya está registrado.")
  17.         return documento
  18.  
  19.  
  20.  
  21.  
  22. class ContratoForm(forms.ModelForm):
  23.     servicios = forms.ModelMultipleChoiceField(
  24.         queryset=Servicio.objects.all(),
  25.         widget=forms.CheckboxSelectMultiple(attrs={'class': 'form-check-input', 'style': 'height: 350px; overflow-y: auto; display: block;'}),
  26.         required=True,
  27.         label="Servicios"
  28.     )
  29.     descripcion = forms.CharField(
  30.         widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 2})
  31.     )
  32.     fecha_inicio = forms.DateField(
  33.         widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
  34.         label="Fecha de Inicio"
  35.     )
  36.     fecha_pago = forms.DateField(
  37.         widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date', 'readonly': 'readonly'}),
  38.         label="Fecha de Pago"
  39.     )
  40.     direccion_instalacion = forms.ModelChoiceField(
  41.         queryset=Direccion.objects.none(),  # Inicialmente vacío
  42.         required=True,
  43.         widget=forms.Select(attrs={'class': 'form-control'}),
  44.         label="Dirección de Instalación"
  45.     )
  46.  
  47.     class Meta:
  48.         model = Contrato
  49.         fields = ['cliente', 'numero_abonado', 'descripcion', 'total', 'fecha_inicio', 'fecha_pago', 'direccion_instalacion', 'servicios']
  50.         labels = {
  51.             'cliente': 'Cliente',
  52.             'numero_abonado': 'N° Abonado',
  53.             'descripcion': 'Descripción',
  54.             'total': 'Total',
  55.             'fecha_inicio': 'Fecha de Inicio',
  56.             'fecha_pago': 'Fecha de Pago',
  57.             'direccion_instalacion': 'Dirección de Instalación',
  58.             'servicios': 'Servicios'
  59.         }
  60.         widgets = {
  61.             'cliente': forms.Select(attrs={'class': 'form-control'}),
  62.             'numero_abonado': forms.TextInput(attrs={'class': 'form-control'}),
  63.             'total': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01', 'readonly': 'readonly'}),
  64.         }
  65.  
  66.     def __init__(self, *args, **kwargs):
  67.         super().__init__(*args, **kwargs)
  68.         if 'cliente' in self.data:
  69.             try:
  70.                 cliente_id = int(self.data.get('cliente'))
  71.                 self.fields['direccion_instalacion'].queryset = Direccion.objects.filter(cliente_id=cliente_id)
  72.             except (ValueError, TypeError):
  73.                 self.fields['direccion_instalacion'].queryset = Direccion.objects.none()
  74.         elif self.instance.pk:
  75.             self.fields['direccion_instalacion'].queryset = Direccion.objects.filter(cliente=self.instance.cliente)
  76.  
  77.         self.fields['cliente'].queryset = self.fields['cliente'].queryset.order_by('documento')
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement