More templating
This commit is contained in:
0
maintenance/__init__.py
Normal file
0
maintenance/__init__.py
Normal file
3
maintenance/admin.py
Normal file
3
maintenance/admin.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
5
maintenance/apps.py
Normal file
5
maintenance/apps.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class MaintenanceConfig(AppConfig):
|
||||||
|
name = 'maintenance'
|
||||||
0
maintenance/migrations/__init__.py
Normal file
0
maintenance/migrations/__init__.py
Normal file
3
maintenance/models.py
Normal file
3
maintenance/models.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
3
maintenance/tests.py
Normal file
3
maintenance/tests.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
3
maintenance/views.py
Normal file
3
maintenance/views.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
21
users/migrations/0003_driver_insurance.py
Normal file
21
users/migrations/0003_driver_insurance.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Generated by Django 3.1.6 on 2021-02-14 13:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('vehicles', '0003_auto_20210214_1315'),
|
||||||
|
('users', '0002_driver_licence'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='driver',
|
||||||
|
name='insurance',
|
||||||
|
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='insurance', to='vehicles.insurancepolicy'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -14,3 +14,5 @@ class Licence(models.Model):
|
|||||||
|
|
||||||
class Driver(CustomUser):
|
class Driver(CustomUser):
|
||||||
licence = models.ForeignKey('Licence', on_delete=models.CASCADE)
|
licence = models.ForeignKey('Licence', on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
insurance = models.ForeignKey('vehicles.InsurancePolicy', related_name='insurance', on_delete=models.CASCADE)
|
||||||
|
|||||||
50
vehicles/migrations/0003_auto_20210214_1315.py
Normal file
50
vehicles/migrations/0003_auto_20210214_1315.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Generated by Django 3.1.6 on 2021-02-14 13:15
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.utils.timezone import utc
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('vehicles', '0002_auto_20210214_1244'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='InsurancePolicy',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('expires', models.DateField()),
|
||||||
|
('company', models.CharField(max_length=20)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='vehicle',
|
||||||
|
name='mot_expires',
|
||||||
|
field=models.DateField(default=datetime.datetime(2021, 2, 14, 13, 15, 32, 868514, tzinfo=utc)),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='vehicle',
|
||||||
|
name='tax_expires',
|
||||||
|
field=models.DateField(default=datetime.datetime(2021, 2, 14, 13, 15, 37, 180671, tzinfo=utc)),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='MotorcycleInsurancePolicy',
|
||||||
|
fields=[
|
||||||
|
('insurancepolicy_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='vehicles.insurancepolicy')),
|
||||||
|
('ride_other_bikes', models.BooleanField(default=False)),
|
||||||
|
('pillion', models.BooleanField(default=False)),
|
||||||
|
],
|
||||||
|
bases=('vehicles.insurancepolicy',),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='insurancepolicy',
|
||||||
|
name='vehicle',
|
||||||
|
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='vehicles.vehicle'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -42,6 +42,9 @@ class Vehicle(models.Model):
|
|||||||
owner = models.ForeignKey('users.CustomUser', blank=True, null=True, on_delete=models.CASCADE)
|
owner = models.ForeignKey('users.CustomUser', blank=True, null=True, on_delete=models.CASCADE)
|
||||||
model = models.ForeignKey('Model', on_delete=models.CASCADE)
|
model = models.ForeignKey('Model', on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
tax_expires = models.DateField()
|
||||||
|
mot_expires = models.DateField()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
@@ -49,3 +52,14 @@ class Vehicle(models.Model):
|
|||||||
class ICEVehicle(Vehicle):
|
class ICEVehicle(Vehicle):
|
||||||
engine_number = models.CharField(max_length=50)
|
engine_number = models.CharField(max_length=50)
|
||||||
capacity = models.IntegerField()
|
capacity = models.IntegerField()
|
||||||
|
|
||||||
|
|
||||||
|
class InsurancePolicy(models.Model):
|
||||||
|
vehicle = models.OneToOneField('Vehicle', on_delete=models.CASCADE) # Not always one to one in practice
|
||||||
|
expires = models.DateField()
|
||||||
|
company = models.CharField(max_length=20)
|
||||||
|
|
||||||
|
|
||||||
|
class MotorcycleInsurancePolicy(InsurancePolicy):
|
||||||
|
ride_other_bikes = models.BooleanField(default=False)
|
||||||
|
pillion = models.BooleanField(default=False)
|
||||||
|
|||||||
@@ -1,5 +1,20 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1 class="text-2xl">Vehicle {{ object }}</h1>
|
<h1 class="text-2xl">Vehicle: <span class="font-bold">{{ object }}</span></h1>
|
||||||
|
<div class="bg-yellow-400 text-black font-black rounded text-xl p-2 w-1/12 m-2 center">{{ object.reg_number|slice:"4:" }} {{ object.reg_number|slice:":3" }}</div>
|
||||||
|
<div class="flex flex-nowrap">
|
||||||
|
<div class="border w-1/3 bg-green-800">
|
||||||
|
<h4 class="font-bold">Tax:</h4>
|
||||||
|
Valid until {{ object.tax_expires }}
|
||||||
|
</div>
|
||||||
|
<div class="border w-1/3 bg-green-800">
|
||||||
|
<h4 class="font-bold">MOT:</h4>
|
||||||
|
Valid until {{ object.mot_expires }}
|
||||||
|
</div>
|
||||||
|
<div class="border w-1/3 bg-green-800">
|
||||||
|
<h4 class="font-bold">Insurance:</h4>
|
||||||
|
Valid until {{ object.insurance.expires }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user