Advertisement
losvilos

forms.py

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