Initial commit: Diario Conversazioni Olimpic Nastri
- Django 5.2 + PostgreSQL + Gunicorn - Conversazioni, Obiettivi, Documenti PDF, Persone - Commenti e aggiornamenti con modifica/eliminazione - Agenda, ricerca live, giorni rimanenti scadenze - Bootstrap 5 + HTMX + toast notifications - Deploy: Nginx + Gunicorn + SSL
This commit is contained in:
96
diario/forms.py
Normal file
96
diario/forms.py
Normal file
@@ -0,0 +1,96 @@
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils import timezone
|
||||
from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento
|
||||
|
||||
|
||||
class ConversazioneForm(forms.ModelForm):
|
||||
data = forms.DateTimeField(
|
||||
label='Data e ora',
|
||||
initial=timezone.now,
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={'class': 'form-control', 'type': 'datetime-local'},
|
||||
format='%Y-%m-%dT%H:%M',
|
||||
),
|
||||
input_formats=['%Y-%m-%dT%H:%M'],
|
||||
)
|
||||
partecipanti = forms.ModelMultipleChoiceField(
|
||||
queryset=User.objects.filter(is_active=True).order_by('first_name', 'username'),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False,
|
||||
label='Partecipanti',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Conversazione
|
||||
fields = ['titolo', 'data', 'contenuto', 'partecipanti']
|
||||
widgets = {
|
||||
'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo della conversazione'}),
|
||||
'contenuto': forms.Textarea(attrs={'class': 'form-control', 'rows': 6, 'placeholder': 'Descrivi cosa è stato discusso...'}),
|
||||
}
|
||||
labels = {
|
||||
'titolo': 'Titolo',
|
||||
'contenuto': 'Contenuto',
|
||||
}
|
||||
|
||||
|
||||
class ObiettivoForm(forms.ModelForm):
|
||||
assegnato_a = forms.ModelMultipleChoiceField(
|
||||
queryset=User.objects.filter(is_active=True).order_by('first_name', 'username'),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False,
|
||||
label='Assegnato a',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Obiettivo
|
||||
fields = ['titolo', 'descrizione', 'tipo', 'assegnato_a', 'stato', 'data_scadenza']
|
||||
widgets = {
|
||||
'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo obiettivo'}),
|
||||
'descrizione': forms.Textarea(attrs={'class': 'form-control', 'rows': 4, 'placeholder': 'Descrizione (opzionale)'}),
|
||||
'tipo': forms.Select(attrs={'class': 'form-select'}),
|
||||
'stato': forms.Select(attrs={'class': 'form-select'}),
|
||||
'data_scadenza': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
|
||||
}
|
||||
|
||||
|
||||
class AggiornamentoObiettivoForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = AggiornamentoObiettivo
|
||||
fields = ['testo']
|
||||
widgets = {
|
||||
'testo': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Scrivi un aggiornamento...'}),
|
||||
}
|
||||
labels = {
|
||||
'testo': 'Aggiornamento',
|
||||
}
|
||||
|
||||
|
||||
class CommentoConversazioneForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = CommentoConversazione
|
||||
fields = ['testo']
|
||||
widgets = {
|
||||
'testo': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Scrivi un commento...'}),
|
||||
}
|
||||
labels = {
|
||||
'testo': 'Commento',
|
||||
}
|
||||
|
||||
|
||||
class DocumentoForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Documento
|
||||
fields = ['titolo', 'descrizione', 'file', 'conversazione', 'obiettivo']
|
||||
widgets = {
|
||||
'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo del documento'}),
|
||||
'descrizione': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Descrizione (opzionale)'}),
|
||||
'file': forms.ClearableFileInput(attrs={'class': 'form-control', 'accept': '.pdf'}),
|
||||
'conversazione': forms.Select(attrs={'class': 'form-select'}),
|
||||
'obiettivo': forms.Select(attrs={'class': 'form-select'}),
|
||||
}
|
||||
labels = {
|
||||
'file': 'File PDF',
|
||||
'conversazione': 'Collegato a conversazione (opzionale)',
|
||||
'obiettivo': 'Collegato a obiettivo (opzionale)',
|
||||
}
|
||||
Reference in New Issue
Block a user