Advertisement
losvilos

forms.py

Feb 28th, 2025
162
0
21 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.13 KB | Help | 0 0
  1. from django import forms
  2. from django.forms import inlineformset_factory
  3. from .models import Cliente, Contrato, Servicio, Direccion
  4.  
  5. class ClienteForm(forms.ModelForm):
  6.     class Meta:
  7.         model = Cliente
  8.         fields = ['documento', 'nombre', 'apellido_paterno', 'apellido_materno', 'fecha_nacimiento',
  9.                   'sexo', 'telefono', 'email', 'estatus']
  10.  
  11. DireccionFormSet = inlineformset_factory(Cliente, Direccion, fields=['zona', 'direccion'], extra=1, can_delete=True)
  12.  
  13. class ContratoForm(forms.ModelForm):
  14.     servicios = forms.ModelMultipleChoiceField(
  15.         queryset=Servicio.objects.all(),
  16.         widget=forms.CheckboxSelectMultiple(attrs={'class': 'form-check-input', 'style': 'height: 350px; overflow-y: auto; display: block;'}),
  17.         required=True,
  18.         label="Servicios"
  19.     )
  20.     descripcion = forms.CharField(
  21.         widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 2})
  22.     )
  23.     fecha_inicio = forms.DateField(
  24.         widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
  25.         label="Fecha de Inicio"
  26.     )
  27.     fecha_pago = forms.DateField(
  28.         widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date', 'readonly': 'readonly'}),
  29.         label="Fecha de Pago"
  30.     )
  31.     direccion_instalacion = forms.ModelChoiceField(
  32.         queryset=Direccion.objects.none(),
  33.         required=True,
  34.         widget=forms.Select(attrs={'class': 'form-control'}),
  35.         label="Dirección de Instalación"
  36.     )
  37.  
  38.     class Meta:
  39.         model = Contrato
  40.         fields = ['cliente', 'numero_abonado', 'descripcion', 'total', 'fecha_inicio', 'fecha_pago', 'direccion_instalacion', 'servicios']
  41.         labels = {
  42.             'cliente': 'Cliente',
  43.             'numero_abonado': 'N° Abonado',
  44.             'descripcion': 'Descripción',
  45.             'total': 'Total',
  46.             'fecha_inicio': 'Fecha de Inicio',
  47.             'fecha_pago': 'Fecha de Pago',
  48.             'direccion_instalacion': 'Dirección de Instalación',
  49.             'servicios': 'Servicios'
  50.         }
  51.         widgets = {
  52.             'cliente': forms.Select(attrs={'class': 'form-control'}),
  53.             'numero_abonado': forms.TextInput(attrs={'class': 'form-control'}),
  54.             'total': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01', 'readonly': 'readonly'}),
  55.         }
  56.  
  57.     def __init__(self, *args, **kwargs):
  58.         super().__init__(*args, **kwargs)
  59.         if 'cliente' in self.data:
  60.             try:
  61.                 cliente_id = int(self.data.get('cliente'))
  62.                 self.fields['direccion_instalacion'].queryset = Direccion.objects.filter(cliente_id=cliente_id)
  63.             except (ValueError, TypeError):
  64.                 self.fields['direccion_instalacion'].queryset = Direccion.objects.none()
  65.         elif self.instance.pk:
  66.             self.fields['direccion_instalacion'].queryset = Direccion.objects.filter(cliente=self.instance.cliente)
  67.  
  68.         self.fields['cliente'].queryset = self.fields['cliente'].queryset.order_by('documento')
  69.  
  70. DireccionFormSet = inlineformset_factory(Cliente, Direccion, fields=['zona', 'direccion'], extra=1, can_delete=True)
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement