First models and views

This commit is contained in:
Dirk Jahnke 2022-03-09 18:13:09 +01:00
parent fea6cdcf96
commit 6171384e14
13 changed files with 303 additions and 4 deletions

34
.gitignore vendored
View File

@ -1,2 +1,34 @@
db.sqlite3
*.log
*.pot
__pycache__
media
*.bak
.idea
*.py[cod]
*$py.class
*.egg
*.manifest
pip-log.txt
pip-delete-this-directory.txt
.coverage
.cache
.tox
htmlcov
.hypothesis
.python-version
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
/site
.mypy_cache/
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history

View File

@ -1,3 +1,8 @@
from django.contrib import admin
# Register your models here.
from .models import Container
from .models import ContainerType
admin.site.register(ContainerType)
admin.site.register(Container)

View File

@ -0,0 +1,52 @@
# Generated by Django 3.2.12 on 2022-03-09 14:12
import container.models
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='ContainerType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('named_id', models.CharField(max_length=40, unique=True)),
('description', models.CharField(max_length=200)),
('width', models.IntegerField(verbose_name='width in mm')),
('height', models.IntegerField(verbose_name='height in mm')),
('length', models.IntegerField(verbose_name='length in mm')),
('inner_width', models.IntegerField(verbose_name='inner width in mm')),
('inner_height', models.IntegerField(verbose_name='inner height in mm')),
('inner_length', models.IntegerField(verbose_name='inner length in mm')),
('has_cover', models.BooleanField(verbose_name='container has a cover')),
('contains_container', models.BooleanField(verbose_name='container can bear container')),
('created_date', models.DateTimeField(verbose_name='datetime created')),
('changed_date', models.DateTimeField(verbose_name='datetime updated')),
('changed_by', models.ForeignKey(on_delete=models.SET(container.models.get_sentinel_user), related_name='changed_container_types', to=settings.AUTH_USER_MODEL)),
('created_by', models.ForeignKey(on_delete=models.SET(container.models.get_sentinel_user), related_name='created_container_types', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Container',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('named_id', models.CharField(max_length=40)),
('color', models.CharField(max_length=60)),
('description', models.CharField(max_length=200)),
('created_date', models.DateTimeField(verbose_name='datetime created')),
('changed_date', models.DateTimeField(verbose_name='datetime updated')),
('changed_by', models.ForeignKey(on_delete=models.SET(container.models.get_sentinel_user), related_name='changed_container', to=settings.AUTH_USER_MODEL)),
('container_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.containertype')),
('created_by', models.ForeignKey(on_delete=models.SET(container.models.get_sentinel_user), related_name='created_container', to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -0,0 +1,58 @@
# Generated by Django 3.2.12 on 2022-03-09 14:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('container', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='container',
name='changed_date',
field=models.DateTimeField(auto_now=True, verbose_name='datetime updated'),
),
migrations.AlterField(
model_name='container',
name='color',
field=models.CharField(blank=True, max_length=60),
),
migrations.AlterField(
model_name='container',
name='created_date',
field=models.DateTimeField(auto_now_add=True, verbose_name='datetime created'),
),
migrations.AlterField(
model_name='container',
name='description',
field=models.CharField(blank=True, max_length=200),
),
migrations.AlterField(
model_name='containertype',
name='changed_date',
field=models.DateTimeField(auto_now=True, verbose_name='datetime updated'),
),
migrations.AlterField(
model_name='containertype',
name='created_date',
field=models.DateTimeField(auto_now_add=True, verbose_name='datetime created'),
),
migrations.AlterField(
model_name='containertype',
name='inner_height',
field=models.IntegerField(null=True, verbose_name='inner height in mm'),
),
migrations.AlterField(
model_name='containertype',
name='inner_length',
field=models.IntegerField(null=True, verbose_name='inner length in mm'),
),
migrations.AlterField(
model_name='containertype',
name='inner_width',
field=models.IntegerField(null=True, verbose_name='inner width in mm'),
),
]

View File

@ -0,0 +1,28 @@
# Generated by Django 3.2.12 on 2022-03-09 14:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('container', '0002_auto_20220309_1419'),
]
operations = [
migrations.AlterField(
model_name='containertype',
name='inner_height',
field=models.IntegerField(blank=True, null=True, verbose_name='inner height in mm'),
),
migrations.AlterField(
model_name='containertype',
name='inner_length',
field=models.IntegerField(blank=True, null=True, verbose_name='inner length in mm'),
),
migrations.AlterField(
model_name='containertype',
name='inner_width',
field=models.IntegerField(blank=True, null=True, verbose_name='inner width in mm'),
),
]

View File

@ -0,0 +1,33 @@
# Generated by Django 3.2.12 on 2022-03-09 14:45
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('container', '0003_auto_20220309_1422'),
]
operations = [
migrations.RenameField(
model_name='container',
old_name='changed_date',
new_name='changed_ts',
),
migrations.RenameField(
model_name='container',
old_name='created_date',
new_name='created_ts',
),
migrations.RenameField(
model_name='containertype',
old_name='changed_date',
new_name='changed_ts',
),
migrations.RenameField(
model_name='containertype',
old_name='created_date',
new_name='created_ts',
),
]

View File

@ -1,3 +1,33 @@
from django.db import models
from django.conf import settings
from django.contrib.auth import get_user_model
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class ContainerType(models.Model):
named_id = models.CharField(max_length=40, unique=True)
description = models.CharField(max_length=200)
width = models.IntegerField('width in mm')
height = models.IntegerField('height in mm')
length = models.IntegerField('length in mm')
inner_width = models.IntegerField('inner width in mm', blank=True, null=True)
inner_height = models.IntegerField('inner height in mm', blank=True, null=True)
inner_length = models.IntegerField('inner length in mm', blank=True, null=True)
has_cover = models.BooleanField('container has a cover')
contains_container = models.BooleanField('container can bear container')
created_ts = models.DateTimeField('datetime created', auto_now_add=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), related_name='created_container_types')
changed_ts = models.DateTimeField('datetime updated', auto_now=True)
changed_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), related_name='changed_container_types')
class Container(models.Model):
named_id = models.CharField(max_length=40)
container_type = models.ForeignKey(ContainerType, on_delete=models.CASCADE)
color = models.CharField(max_length=60, blank=True)
description = models.CharField(max_length=200, blank=True)
created_ts = models.DateTimeField('datetime created', auto_now_add=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), related_name='created_container')
changed_ts = models.DateTimeField('datetime updated', auto_now=True)
changed_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), related_name='changed_container')
# Create your models here.

View File

@ -0,0 +1,4 @@
<h1>Container: {{ container.named_id }}</h1>
<div>{{ container.description }}</div>
<div>Color: {{ container.color }}</div>
<div>Container Type: <a href='/container/type/{{ container.container_type.id }}'>{{ container.container_type.named_id }}</a></div>

View File

@ -0,0 +1,8 @@
<h1>Container: {{ container_type.named_id }}</h1>
<div>{{ container_type.description }}</div>
<table>
<tr><td>Width:</td><td>{{ container_type.width }} mm</td><td>Inner Width:</td><td>{{ container_type.inner_width }} mm</td></tr>
<tr><td>Length:</td><td>{{ container_type.length }} mm</td><td>Inner Length:</td><td>{{ container_type.inner_length }} mm</td></tr>
<tr><td>Height:</td><td>{{ container_type.height }} mm</td><td>Inner Height:</td><td>{{ container_type.inner_height }} mm</td></tr>
<tr><td>Has Cover:</td><td>{% if container_type.has_cover %} yes {% else %} no {% endif %}</td><td>Can hold Containers:</td><td>{% if container_type.contains_container %} yes {% else %} no {% endif %}</td></tr>
</table>

View File

@ -0,0 +1,24 @@
<div>
<div>New Container:</div>
{% if container_list %}
<ul>
{% for container in container_list %}
<li><a href="/container/{{ container.id }}/">{{ container.named_id }} {{ container.description }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No container are available.</p>
{% endif %}
</div>
<div>
<div>New Container Types:</div>
{% if container_type_list %}
<ul>
{% for ctype in container_type_list %}
<li><a href="/container/type/{{ ctype.id }}/">{{ ctype.named_id }} {{ ctype.description }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No container types are available.</p>
{% endif %}
</div>

View File

@ -4,5 +4,8 @@ from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:container_id>/', views.container_details, name='container_details'),
path('type/<int:container_type_id>/', views.container_type_details, name='container_type_details'),
# path('type/<string:container_type_named_id>/', views.container_type_details, name='container_type_details'),
]

View File

@ -1,7 +1,28 @@
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from django.http import Http404
from .models import Container, ContainerType
def index(request):
return HttpResponse("Hello, world. You're at the container index.")
container_list = Container.objects.order_by('-created_ts')[:5]
container_type_list = ContainerType.objects.order_by('-created_ts')[:5]
ctx = {'container_list': container_list, 'container_type_list': container_type_list}
return render(request, 'container/index.html', ctx)
def container_type_details(request, container_type_id):
try:
ctype = ContainerType.objects.get(pk=container_type_id)
except ContainerType.DoesNotExist:
raise Http404("Container Type does not exist")
return render(request, 'container/container_type_details.html', {'container_type': ctype})
def container_details(request, container_id):
try:
container = Container.objects.get(pk=container_id)
except Container.DoesNotExist:
raise Http404("Container does not exist")
return render(request, 'container/container_details.html', {'container': container})

View File

@ -31,6 +31,7 @@ ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'container.apps.ContainerConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',