Add: CreateTicket view and form

This commit is contained in:
Stepan Zhukovsky 2023-08-05 20:18:20 +09:00
parent eb80d72153
commit 138b8f26ad
7 changed files with 71 additions and 16 deletions

View File

@ -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'),
)

View File

@ -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),
),
]

View File

@ -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)

View File

@ -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 %}>
</div>

View File

@ -1,16 +1,16 @@
{% extends 'collector/base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block title %}<title>Collector - create</title>{% endblock title %}
{% block main %}
<div class="container mt-3">
<div class="row">
<form action="{% url 'collector:create' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-success">
Create
</button>
</form>
</div>
<div class="card">
<div class="card-header">
<h4>New ticket:</h4>
</div>
<div class="card-body">
{% crispy form %}
</div>
</div>
</div>
{% endblock main %}

View File

@ -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

View File

@ -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"