diff --git a/logs_collector/collector/forms.py b/logs_collector/collector/forms.py index 5a7d42c..ac65c7f 100644 --- a/logs_collector/collector/forms.py +++ b/logs_collector/collector/forms.py @@ -1,9 +1,27 @@ -from django.forms import ModelForm +from django import forms +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Layout, Submit, Div +from crispy_bootstrap5.bootstrap5 import FloatingField from .models import Ticket -class TicketForm(ModelForm): +class CreateTicketForm(forms.ModelForm): + class Meta: model = Ticket - fields = ['number', 'platform', 'resolved', 'note'] + fields = ['number', 'platform', 'note'] + widgets = { + 'platform': forms.RadioSelect() + } + + def __init__(self, *args, **kwargs): + super(CreateTicketForm, self).__init__(*args, **kwargs) + self.helper = FormHelper(self) + # self.helper.attrs = {"novalidate": ''} + + self.helper.layout = Layout( + Div(FloatingField('number'), 'platform', css_class='col-md-2'), + Div('note', css_class='col-md-6'), + Submit('submit', 'Create', css_class='btn btn-success'), + ) diff --git a/logs_collector/collector/migrations/0002_alter_ticket_options_alter_archive_size_and_more.py b/logs_collector/collector/migrations/0002_alter_ticket_options_alter_archive_size_and_more.py new file mode 100644 index 0000000..5bf4f91 --- /dev/null +++ b/logs_collector/collector/migrations/0002_alter_ticket_options_alter_archive_size_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2 on 2023-08-05 11:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('collector', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='ticket', + options={'ordering': ['-time_create']}, + ), + migrations.AlterField( + model_name='archive', + name='size', + field=models.CharField(blank=True, editable=False, max_length=50), + ), + migrations.AlterField( + model_name='ticket', + name='number', + field=models.IntegerField(db_index=True, unique=True), + ), + ] diff --git a/logs_collector/collector/models.py b/logs_collector/collector/models.py index 81eb959..45385d5 100644 --- a/logs_collector/collector/models.py +++ b/logs_collector/collector/models.py @@ -60,11 +60,11 @@ class Platform(models.Model): return reverse('collector:platform', kwargs={'platform': self.name}) def __str__(self): - return self.name + return self.pretty_name class Ticket(models.Model): - number = models.IntegerField() + number = models.IntegerField(unique=True, db_index=True) resolved = models.BooleanField(default=False) note = models.TextField(blank=True) time_create = models.DateTimeField(auto_now_add=True) diff --git a/logs_collector/collector/templates/collector/includes/ticket_info.html b/logs_collector/collector/templates/collector/includes/ticket_info.html index f6e2d01..4bdeed5 100644 --- a/logs_collector/collector/templates/collector/includes/ticket_info.html +++ b/logs_collector/collector/templates/collector/includes/ticket_info.html @@ -9,7 +9,7 @@ type="checkbox" role="switch" name="ticket-state" - ticket-state-url="{% url 'collector:ajax_update_state_ticket' ticket.platform ticket.number %}" + ticket-state-url="{% url 'collector:ajax_update_state_ticket' ticket.platform.name ticket.number %}" {% if ticket.resolved %} ticket-state-switch="1" {% endif %} {% if ticket.resolved %} checked {% endif %}> diff --git a/logs_collector/collector/templates/collector/ticket_create.html b/logs_collector/collector/templates/collector/ticket_create.html index d274bbb..a84b4f4 100644 --- a/logs_collector/collector/templates/collector/ticket_create.html +++ b/logs_collector/collector/templates/collector/ticket_create.html @@ -1,16 +1,16 @@ {% extends 'collector/base.html' %} {% load static %} +{% load crispy_forms_tags %} {% block title %}Collector - create{% endblock title %} {% block main %}
-
-
- {% csrf_token %} - {{ form.as_p }} - -
-
+
+
+

New ticket:

+
+
+ {% crispy form %} +
+
{% endblock main %} diff --git a/logs_collector/collector/views.py b/logs_collector/collector/views.py index 3edcffc..9fec4b1 100644 --- a/logs_collector/collector/views.py +++ b/logs_collector/collector/views.py @@ -9,6 +9,7 @@ from rest_framework import status # from rest_framework.response import Response from .models import Archive, Ticket +from .forms import CreateTicketForm from .utils import is_ajax @@ -30,8 +31,8 @@ class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View): class CreateTicket(LoginRequiredMixin, generic.CreateView): model = Ticket + form_class = CreateTicketForm template_name = 'collector/ticket_create.html' - fields = ['number', 'platform', 'resolved', 'note'] def form_valid(self, form): form.instance.user = self.request.user diff --git a/logs_collector/logs_collector/settings.py b/logs_collector/logs_collector/settings.py index 88b5d7a..dee3a4a 100644 --- a/logs_collector/logs_collector/settings.py +++ b/logs_collector/logs_collector/settings.py @@ -35,6 +35,8 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'collector.apps.CollectorConfig', # main app 'rest_framework', + "crispy_forms", + "crispy_bootstrap5", 'django_cleanup.apps.CleanupConfig', # required bottom ] @@ -126,3 +128,10 @@ MEDIA_URL = 'media/' MEDIA_ROOT_FOR_SENSITIVE_FILES = BASE_DIR / 'archives' MEDIA_URL_FOR_SENSITIVE_FILES = '/archives/' + + +# django-crispy-forms and crispy-bootstrap5 +# https://django-crispy-forms.readthedocs.io/en/latest/ +CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" + +CRISPY_TEMPLATE_PACK = "bootstrap5"