Update to Django 4.2

pull/138/head
JensDiemer 2023-07-21 06:24:54 +02:00
rodzic cc3c13cf82
commit 5e0a692cfd
12 zmienionych plików z 921 dodań i 691 usunięć

Wyświetl plik

@ -155,6 +155,9 @@ Files are separated into: "/src/" and "/development/"
* [**dev**](https://github.com/jedie/PyInventory/compare/v0.18.1...main)
* Update to Django 4.2
* remove django-processinfo
* Bugfix ItemModelAdmin
* tbc
* [v0.18.1 - 15.06.2023](https://github.com/jedie/PyInventory/compare/v0.18.0...v0.18.1)
* Update requirements

70
poetry.lock wygenerowano
Wyświetl plik

@ -384,13 +384,13 @@ files = [
[[package]]
name = "click"
version = "8.1.5"
version = "8.1.6"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
files = [
{file = "click-8.1.5-py3-none-any.whl", hash = "sha256:e576aa487d679441d7d30abb87e1b43d24fc53bffb8758443b1a9e1cee504548"},
{file = "click-8.1.5.tar.gz", hash = "sha256:4be4b1af8d665c6d942909916d31a213a106800c47d0eeba73d34da3cbc11367"},
{file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"},
{file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"},
]
[package.dependencies]
@ -660,13 +660,13 @@ dev = ["attribution (==1.6.2)", "black (==23.3.0)", "flit (==3.8.0)", "mypy (==1
[[package]]
name = "distlib"
version = "0.3.6"
version = "0.3.7"
description = "Distribution utilities"
optional = false
python-versions = "*"
files = [
{file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"},
{file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"},
{file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"},
{file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
]
[[package]]
@ -682,18 +682,18 @@ files = [
[[package]]
name = "django"
version = "4.0.10"
version = "4.2.3"
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
optional = false
python-versions = ">=3.8"
files = [
{file = "Django-4.0.10-py3-none-any.whl", hash = "sha256:4496eb4f65071578b703fdc6e6f29302553c7440e3f77baf4cefa4a4e091fc3d"},
{file = "Django-4.0.10.tar.gz", hash = "sha256:2c2f73c16b11cb272c6d5e3b063f0d1be06f378d8dc6005fbe8542565db659cc"},
{file = "Django-4.2.3-py3-none-any.whl", hash = "sha256:f7c7852a5ac5a3da5a8d5b35cc6168f31b605971441798dac845f17ca8028039"},
{file = "Django-4.2.3.tar.gz", hash = "sha256:45a747e1c5b3d6df1b141b1481e193b033fd1fdbda3ff52677dc81afdaacbaed"},
]
[package.dependencies]
asgiref = ">=3.4.1,<4"
sqlparse = ">=0.2.2"
asgiref = ">=3.6.0,<4"
sqlparse = ">=0.3.1"
tzdata = {version = "*", markers = "sys_platform == \"win32\""}
[package.extras]
@ -702,13 +702,13 @@ bcrypt = ["bcrypt"]
[[package]]
name = "django-admin-sortable2"
version = "2.1.8"
version = "2.1.9"
description = "Generic drag-and-drop sorting for the List, the Stacked- and the Tabular-Inlines Views in the Django Admin"
optional = false
python-versions = "*"
files = [
{file = "django-admin-sortable2-2.1.8.tar.gz", hash = "sha256:6933a9bba9dbedc4a106bb488e4b8a1fb85cbe0459fb46504fe602d65dbfd3e9"},
{file = "django_admin_sortable2-2.1.8-py3-none-any.whl", hash = "sha256:aeb75152c2ed222cf0894e96c449bb2b64eb629f0494b4b203c23e0b36ca2349"},
{file = "django-admin-sortable2-2.1.9.tar.gz", hash = "sha256:bf036785c598685a0019eb08340b88fe6ca74bd178033e2290e6c41b62fa4bf1"},
{file = "django_admin_sortable2-2.1.9-py3-none-any.whl", hash = "sha256:6de19689cb2f131d256ce19d2fd148728d551943d8463b1d81f6334adfa0b6fc"},
]
[package.dependencies]
@ -810,20 +810,6 @@ django = ">=3.2"
[package.extras]
tests = ["coverage"]
[[package]]
name = "django-processinfo"
version = "1.1.0"
description = "Django application to collect information about the running server processes."
optional = false
python-versions = ">=3.7,<4.0.0"
files = [
{file = "django-processinfo-1.1.0.tar.gz", hash = "sha256:e5d883c2bd4d3a197357bb381a4c19165b5c9ff9a852f96b0dd1ccfd98e2e4a2"},
{file = "django_processinfo-1.1.0-py3-none-any.whl", hash = "sha256:c7d1fe2203655925294c860878509fe2a6eb1a5390a170c848023e4619b903da"},
]
[package.dependencies]
Django = "*"
[[package]]
name = "django-reversion"
version = "5.0.4"
@ -1191,17 +1177,17 @@ test = ["objgraph", "psutil"]
[[package]]
name = "gunicorn"
version = "20.1.0"
version = "21.2.0"
description = "WSGI HTTP Server for UNIX"
optional = false
python-versions = ">=3.5"
files = [
{file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"},
{file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"},
{file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"},
{file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"},
]
[package.dependencies]
setuptools = ">=3.0"
packaging = "*"
[package.extras]
eventlet = ["eventlet (>=0.24.1)"]
@ -1752,13 +1738,13 @@ testing = ["pytest", "pytest-cov"]
[[package]]
name = "platformdirs"
version = "3.8.1"
version = "3.9.1"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
optional = false
python-versions = ">=3.7"
files = [
{file = "platformdirs-3.8.1-py3-none-any.whl", hash = "sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c"},
{file = "platformdirs-3.8.1.tar.gz", hash = "sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528"},
{file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"},
{file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"},
]
[package.extras]
@ -2763,13 +2749,13 @@ files = [
[[package]]
name = "urllib3"
version = "2.0.3"
version = "2.0.4"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.7"
files = [
{file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"},
{file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"},
{file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"},
{file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"},
]
[package.extras]
@ -2780,13 +2766,13 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "virtualenv"
version = "20.24.0"
version = "20.24.1"
description = "Virtual Python Environment builder"
optional = false
python-versions = ">=3.7"
files = [
{file = "virtualenv-20.24.0-py3-none-any.whl", hash = "sha256:18d1b37fc75cc2670625702d76849a91ebd383768b4e91382a8d51be3246049e"},
{file = "virtualenv-20.24.0.tar.gz", hash = "sha256:e2a7cef9da880d693b933db7654367754f14e20650dc60e8ee7385571f8593a3"},
{file = "virtualenv-20.24.1-py3-none-any.whl", hash = "sha256:01aacf8decd346cf9a865ae85c0cdc7f64c8caa07ff0d8b1dfc1733d10677442"},
{file = "virtualenv-20.24.1.tar.gz", hash = "sha256:2ef6a237c31629da6442b0bcaa3999748108c7166318d1f55cc9f8d7294e97bd"},
]
[package.dependencies]
@ -2883,4 +2869,4 @@ psycopg2-source = ["psycopg2"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.9,<4.0.0"
content-hash = "741fee43ced106c7d53820902dc418abc9e4c3b1ad3c1007a5f38f9477e17e2a"
content-hash = "c1cc7b68e0d4fdc3ebfb977fd4dc524e5b04cf86e744a9c8ddaa2cefa6b9d9a5"

Wyświetl plik

@ -42,12 +42,9 @@ readme = 'README.md'
[tool.poetry.dependencies]
python = ">=3.9,<4.0.0" # Stay with 3.9 until YunoHost used >=Debian 11 (Bullseye)
django = "<4.1" # FIXME: https://github.com/jedie/django-processinfo/issues/19
django = "*"
colorlog = "*" # https://github.com/borntyping/python-colorlog
gunicorn = "*" # https://github.com/benoimyproject.wsgitc/gunicorn
django-processinfo = "*" # https://github.com/jedie/django-processinfo/
django-debug-toolbar = "*" # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html
django-import-export = "*" # https://github.com/django-import-export/django-import-export
django-dbbackup = "*" # https://github.com/django-dbbackup/django-dbbackup

Wyświetl plik

@ -34,7 +34,7 @@
<label for="searchbar">
<img alt="Search" src="/static/admin/img/search.svg"/>
</label>
<input autofocus="" id="searchbar" name="q" size="40" type="text" value=""/>
<input id="searchbar" name="q" size="40" type="text" value=""/>
<input type="submit" value="Search"/>
</div>
</form>
@ -50,31 +50,33 @@
<h2>
Filter
</h2>
<h3>
By Limit tree depth
</h3>
<ul>
<li class="selected">
<a href="?" title="All">
All
</a>
</li>
<li>
<a href="?level=1" title="Only root">
Only root
</a>
</li>
<li>
<a href="?level=2" title="Root + first sub">
Root + first sub
</a>
</li>
<li>
<a href="?level=3" title="Root + first + second sub">
Root + first + second sub
</a>
</li>
</ul>
<details data-filter-title="Limit tree depth" open="">
<summary>
By Limit tree depth
</summary>
<ul>
<li class="selected">
<a href="?">
All
</a>
</li>
<li>
<a href="?level=1">
Only root
</a>
</li>
<li>
<a href="?level=2">
Root + first sub
</a>
</li>
<li>
<a href="?level=3">
Root + first + second sub
</a>
</li>
</ul>
</details>
</div>
</div>
</div>

Wyświetl plik

@ -81,7 +81,6 @@ INSTALLED_APPS = [
'tagulous', # https://github.com/radiac/django-tagulous
'adminsortable2', # https://github.com/jrief/django-admin-sortable2
'axes', # https://github.com/jazzband/django-axes
'django_processinfo', # https://github.com/jedie/django-processinfo/
# https://github.com/jedie/django-tools/tree/master/django_tools/serve_media_app
'django_tools.serve_media_app.apps.UserMediaFilesConfig',
@ -102,8 +101,6 @@ AUTHENTICATION_BACKENDS = [
]
MIDDLEWARE = [
'django_processinfo.middlewares.ProcessInfoMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
@ -190,14 +187,6 @@ STATIC_ROOT = str(__Path(BASE_PATH, 'static'))
MEDIA_URL = '/media/'
MEDIA_ROOT = str(__Path(BASE_PATH, 'media'))
# _____________________________________________________________________________
# django-processinfo
from django_processinfo import app_settings as PROCESSINFO # noqa
PROCESSINFO.ADD_INFO = False # Don't add info in HTML page
# _____________________________________________________________________________
# Django-dbbackup

Wyświetl plik

@ -11,7 +11,13 @@ os.environ.setdefault('DJANGO_ALLOW_ASYNC_UNSAFE', '1')
@pytest.fixture(scope='session')
def browser_context_args(browser_context_args):
browser_context_args['ignore_https_errors'] = True
browser_context_args.update(
dict(
ignore_https_errors=True,
locale='en_US',
timezone_id='Europe/Berlin',
)
)
return browser_context_args

Wyświetl plik

@ -1,9 +1,4 @@
from django.contrib.auth.models import User
from django.test import TestCase, override_settings
from django_processinfo.models import ProcessInfo, SiteStatistics
from model_bakery import baker
from inventory.permissions import get_or_create_normal_user_group
from django.test import TestCase
class AdminAnonymousTests(TestCase):
@ -22,59 +17,3 @@ class AdminAnonymousTests(TestCase):
self.assertRedirects(
response, expected_url='/admin/login/?next=/admin/', fetch_redirect_response=False
)
@override_settings(SECURE_SSL_REDIRECT=False)
class ProcessinfoAdminTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.superuser = baker.make(
User, is_staff=True, is_active=True, is_superuser=True
)
cls.normaluser = baker.make(
User, is_staff=True, is_active=True, is_superuser=False
)
assert cls.normaluser.user_permissions.count() == 0
group = get_or_create_normal_user_group()[0]
cls.normaluser.groups.set([group])
def test_superuser_access(self):
self.client.force_login(self.superuser)
assert SiteStatistics.objects.count() == 0
assert ProcessInfo.objects.count() == 0
response = self.client.get('/admin/django_processinfo/sitestatistics/')
self.assertTemplateUsed(response, 'admin/django_processinfo/change_list.html')
response = response.content.decode('utf-8')
self.assertInHTML('<h2>System information</h2>', response)
self.assertInHTML('<dt>Living processes (current/avg/max)</dt>', response)
assert SiteStatistics.objects.count() == 1
assert ProcessInfo.objects.count() == 1
response = self.client.get('/admin/django_processinfo/processinfo/')
self.assertTemplateUsed(response, 'admin/django_processinfo/change_list.html')
response = response.content.decode('utf-8')
self.assertInHTML('<h2>System information</h2>', response)
self.assertInHTML('<dt>Living processes (current/avg/max)</dt>', response)
assert SiteStatistics.objects.count() == 1
assert ProcessInfo.objects.count() == 1
def test_normal_user_access(self):
self.client.force_login(self.normaluser)
assert SiteStatistics.objects.count() == 0
assert ProcessInfo.objects.count() == 0
response = self.client.get('/admin/django_processinfo/sitestatistics/')
assert response.status_code == 403
response = self.client.get('/admin/django_processinfo/processinfo/')
assert response.status_code == 403
assert SiteStatistics.objects.count() == 1
assert ProcessInfo.objects.count() == 1

Wyświetl plik

@ -24,26 +24,19 @@
<label for="searchbar">
<img alt="Search" src="/static/admin/img/search.svg"/>
</label>
<input autofocus="" id="searchbar" name="q" size="40" type="text" value=""/>
<input id="searchbar" name="q" size="40" type="text" value=""/>
<input type="submit" value="Search"/>
</div>
</form>
</div>
<div class="xfull">
<ul class="toplinks">
<li class="date-back">
<a href="?create_dt__year=2000">
2000
</a>
</li>
<li>
<a href="?create_dt__day=1&amp;create_dt__month=1&amp;create_dt__year=2000">
January 1
</a>
</li>
</ul>
<br class="clear"/>
</div>
<nav class="toplinks">
<a class="date-back" href="?create_dt__year=2000">
2000
</a>
<a href="?create_dt__day=1&amp;create_dt__month=1&amp;create_dt__year=2000">
January 1
</a>
</nav>
<form id="changelist-form" method="post" novalidate="">
MockedCsrfTokenNode
<div class="actions">
@ -322,31 +315,33 @@
<h2>
Filter
</h2>
<h3>
By Limit tree depth
</h3>
<ul>
<li class="selected">
<a href="?" title="All">
All
</a>
</li>
<li>
<a href="?level=1" title="Only root">
Only root
</a>
</li>
<li>
<a href="?level=2" title="Root + first sub">
Root + first sub
</a>
</li>
<li>
<a href="?level=3" title="Root + first + second sub">
Root + first + second sub
</a>
</li>
</ul>
<details data-filter-title="Limit tree depth" open="">
<summary>
By Limit tree depth
</summary>
<ul>
<li class="selected">
<a href="?">
All
</a>
</li>
<li>
<a href="?level=1">
Only root
</a>
</li>
<li>
<a href="?level=2">
Root + first sub
</a>
</li>
<li>
<a href="?level=3">
Root + first + second sub
</a>
</li>
</ul>
</details>
</div>
</div>
</div>

Wyświetl plik

@ -11,38 +11,52 @@
Internals
</h2>
<div class="form-row field-id field-version">
<div class="fieldBox field-id">
<label>
ID:
</label>
<div class="readonly">
-
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-id">
<label>
ID:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
<div>
ID
</div>
</div>
</div>
<div class="help">
ID
</div>
</div>
<div class="fieldBox field-version">
<label class="required inline" for="id_version">
Version:
</label>
<input id="id_version" name="version" required="" type="hidden" value="0"/>
0
<div class="help">
Internal version number of this entry. Used to protect the overwriting of an older entry.
<div>
<div class="flex-container fieldBox field-version">
<label class="required inline" for="id_version">
Version:
</label>
<input id="id_version" name="version" required="" type="hidden" value="0"/>
0
</div>
<div class="help" id="id_version_helptext">
<div>
Internal version number of this entry. Used to protect the overwriting of an older entry.
</div>
</div>
</div>
</div>
</div>
<div class="form-row field-user">
<div>
<label>
User:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
User:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
The user who is the owner of this entry and can manage it (will be set automatically)
<div>
The user who is the owner of this entry and can manage it (will be set automatically)
</div>
</div>
</div>
</div>
@ -53,27 +67,35 @@
</h2>
<div class="form-row field-create_dt">
<div>
<label>
Create date:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
Create date:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
(will be set automatically)
<div>
(will be set automatically)
</div>
</div>
</div>
</div>
<div class="form-row field-update_dt">
<div>
<label>
Last update:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
Last update:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
(will be set automatically)
<div>
(will be set automatically)
</div>
</div>
</div>
</div>
@ -84,118 +106,158 @@
</h2>
<div class="form-row field-kind">
<div>
<label class="required" for="id_kind">
Kind:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 3, "space_delimiter": false, "required": true}' data-tagulous="true" data-theme="admin-autocomplete" id="id_kind" name="kind" required="" type="text"/>
<div class="flex-container">
<label class="required" for="id_kind">
Kind:
</label>
<div class="related-widget-wrapper" data-model-ref="Item Kind">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 3, "space_delimiter": false, "required": true}' data-tagulous="true" data-theme="admin-autocomplete" id="id_kind" name="kind" required="" type="text"/>
</div>
</div>
<div class="help">
<div class="help" id="id_kind_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-producer field-name">
<div class="fieldBox field-producer">
<label for="id_producer">
Producer:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 1, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_producer" name="producer" type="text"/>
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-producer">
<label for="id_producer">
Producer:
</label>
<div class="related-widget-wrapper" data-model-ref="Item Producer">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 1, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_producer" name="producer" type="text"/>
</div>
</div>
<div class="help" id="id_producer_helptext">
<div>
</div>
</div>
</div>
<div class="help">
</div>
</div>
<div class="fieldBox field-name">
<label class="required inline" for="id_name">
Name:
</label>
<input class="vTextField" id="id_name" maxlength="255" name="name" required="" type="text"/>
<div class="help">
Name
<div>
<div class="flex-container fieldBox field-name">
<label class="required inline" for="id_name">
Name:
</label>
<input class="vTextField" id="id_name" maxlength="255" name="name" required="" type="text"/>
</div>
<div class="help" id="id_name_helptext">
<div>
Name
</div>
</div>
</div>
</div>
</div>
<div class="form-row field-description">
<div>
<label for="id_description">
Description:
</label>
<div class="django-ckeditor-widget" data-field-id="id_description" style="display: inline-block;">
<textarea cols="40" data-config='{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full": [["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"], ["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"], ["Smiley", "SpecialChar"], ["Source"]], "toolbar": "PyInventoryToolbarConfig", "height": "25em", "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "removeButtons": "Language,Cut,Copy,Paste,Undo,Redo,Anchor", "removePlugins": ["a11yhelp", "adobeair", "ajax", "autoembed", "autolink", "bbcode", "bidi", "clipboard", "codesnippet", "codesnippetgeshi", "contextmenu", "copyformatting", "devtools", "dialog", "dialogadvtab", "div", "divarea", "docprops", "embed", "embedbase", "embedsemantic", "enterkey", "exportpdf", "find", "flash", "forms", "htmlwriter", "iframe", "iframedialog", "language", "magicline", "mathjax", "newpage", "notification", "notificationaggregator", "pagebreak", "pastefromgdocs", "pastefromword", "pastetext", "pastetools", "placeholder", "preview", "print", "save", "scayt", "selectall", "sharedspace", "smiley", "sourcedialog", "specialchar", "stylescombo", "stylesheetparser", "tab", "templates", "uicolor", "widget", "wsc", "xml"], "toolbar_PyInventoryToolbarConfig": [{"name": "basicstyles", "items": ["Bold", "Italic", "Underline", "Strike", "-", "RemoveFormat"]}, {"name": "paragraph", "items": ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"]}, {"name": "links", "items": ["Link", "Unlink", "Anchor"]}, {"name": "insert", "items": ["Image", "Table", "HorizontalRule"]}, "/", {"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]}, {"name": "colors", "items": ["TextColor", "BGColor"]}, {"name": "tools", "items": ["Maximize", "ShowBlocks", "Source"]}, {"name": "about", "items": ["About"]}], "filebrowserUploadUrl": "/ckeditor/upload/", "filebrowserBrowseUrl": "/ckeditor/browse/", "language": "en"}' data-external-plugin-resources="[]" data-id="id_description" data-processed="0" data-type="ckeditortype" id="id_description" name="description" rows="10"></textarea>
<div class="flex-container">
<label for="id_description">
Description:
</label>
<div class="django-ckeditor-widget" data-field-id="id_description" style="display: inline-block;">
<textarea cols="40" data-config='{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full": [["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"], ["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"], ["Smiley", "SpecialChar"], ["Source"]], "toolbar": "PyInventoryToolbarConfig", "height": "25em", "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "removeButtons": "Language,Cut,Copy,Paste,Undo,Redo,Anchor", "removePlugins": ["a11yhelp", "adobeair", "ajax", "autoembed", "autolink", "bbcode", "bidi", "clipboard", "codesnippet", "codesnippetgeshi", "contextmenu", "copyformatting", "devtools", "dialog", "dialogadvtab", "div", "divarea", "docprops", "embed", "embedbase", "embedsemantic", "enterkey", "exportpdf", "find", "flash", "forms", "htmlwriter", "iframe", "iframedialog", "language", "magicline", "mathjax", "newpage", "notification", "notificationaggregator", "pagebreak", "pastefromgdocs", "pastefromword", "pastetext", "pastetools", "placeholder", "preview", "print", "save", "scayt", "selectall", "sharedspace", "smiley", "sourcedialog", "specialchar", "stylescombo", "stylesheetparser", "tab", "templates", "uicolor", "widget", "wsc", "xml"], "toolbar_PyInventoryToolbarConfig": [{"name": "basicstyles", "items": ["Bold", "Italic", "Underline", "Strike", "-", "RemoveFormat"]}, {"name": "paragraph", "items": ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"]}, {"name": "links", "items": ["Link", "Unlink", "Anchor"]}, {"name": "insert", "items": ["Image", "Table", "HorizontalRule"]}, "/", {"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]}, {"name": "colors", "items": ["TextColor", "BGColor"]}, {"name": "tools", "items": ["Maximize", "ShowBlocks", "Source"]}, {"name": "about", "items": ["About"]}], "filebrowserUploadUrl": "/ckeditor/upload/", "filebrowserBrowseUrl": "/ckeditor/browse/", "language": "en"}' data-external-plugin-resources="[]" data-id="id_description" data-processed="0" data-type="ckeditortype" id="id_description" name="description" rows="10"></textarea>
</div>
</div>
<div class="help">
<div class="help" id="id_description_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-tags">
<div>
<label for="id_tags">
Tags:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_tags" name="tags" type="text"/>
<div class="flex-container">
<label for="id_tags">
Tags:
</label>
<div class="related-widget-wrapper" data-model-ref="Item Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_tags" name="tags" type="text"/>
</div>
</div>
<div class="help">
<div class="help" id="id_tags_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-fcc_id">
<div>
<label for="id_fcc_id">
FCC ID:
</label>
<input class="vTextField" id="id_fcc_id" maxlength="20" name="fcc_id" type="text"/>
<div class="help">
Unique number from the FCC
<div class="flex-container">
<label for="id_fcc_id">
FCC ID:
</label>
<input class="vTextField" id="id_fcc_id" maxlength="20" name="fcc_id" type="text"/>
</div>
<div class="help" id="id_fcc_id_helptext">
<div>
Unique number from the FCC
</div>
</div>
</div>
</div>
<div class="form-row field-parent">
<div>
<label for="id_parent">
Parent:
</label>
<div class="related-widget-wrapper">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="parent" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_parent" lang="en" name="parent">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&amp;_popup=1" id="change_id_parent" title="Change selected Item">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/itemmodel/add/?_to_field=id&amp;_popup=1" id="add_id_parent" title="Add another Item">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&amp;_popup=1" id="delete_id_parent" title="Delete selected Item">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<div class="flex-container">
<label for="id_parent">
Parent:
</label>
<div class="related-widget-wrapper" data-model-ref="Item">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="parent" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_parent" lang="en" name="parent">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&amp;_popup=1" data-popup="yes" id="change_id_parent" title="Change selected Item">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" data-popup="yes" href="/admin/inventory/itemmodel/add/?_to_field=id&amp;_popup=1" id="add_id_parent" title="Add another Item">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&amp;_popup=1" data-popup="yes" id="delete_id_parent" title="Delete selected Item">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<a class="related-widget-wrapper-link view-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id" id="view_id_parent" title="View selected Item">
<img alt="View" src="/static/admin/img/icon-viewlink.svg"/>
</a>
</div>
</div>
<div class="help">
Locations can be nested. Example: The box 12 in cupboard 3
<div class="help" id="id_parent_helptext">
<div>
Locations can be nested. Example: The box 12 in cupboard 3
</div>
</div>
</div>
</div>
<div class="form-row field-location">
<div>
<label for="id_location">
Location:
</label>
<div class="related-widget-wrapper">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="location" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_location" lang="en" name="location">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&amp;_popup=1" id="change_id_location" title="Change selected Location">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/locationmodel/add/?_to_field=id&amp;_popup=1" id="add_id_location" title="Add another Location">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&amp;_popup=1" id="delete_id_location" title="Delete selected Location">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<div class="flex-container">
<label for="id_location">
Location:
</label>
<div class="related-widget-wrapper" data-model-ref="Location">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="location" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_location" lang="en" name="location">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&amp;_popup=1" data-popup="yes" id="change_id_location" title="Change selected Location">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" data-popup="yes" href="/admin/inventory/locationmodel/add/?_to_field=id&amp;_popup=1" id="add_id_location" title="Add another Location">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&amp;_popup=1" data-popup="yes" id="delete_id_location" title="Delete selected Location">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<a class="related-widget-wrapper-link view-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id" id="view_id_location" title="View selected Location">
<img alt="View" src="/static/admin/img/icon-viewlink.svg"/>
</a>
</div>
</div>
<div class="help">
<div class="help" id="id_location_helptext">
<div>
</div>
</div>
</div>
</div>
@ -206,11 +268,13 @@
</h2>
<div class="form-row field-related_items">
<div>
<label>
Related items:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
Related items:
</label>
<div class="readonly">
-
</div>
</div>
</div>
</div>
@ -221,29 +285,47 @@
</h2>
<div class="form-row field-lent_to">
<div>
<label for="id_lent_to">
Lent to:
</label>
<input class="vTextField" id="id_lent_to" maxlength="64" name="lent_to" type="text"/>
<div class="help">
<div class="flex-container">
<label for="id_lent_to">
Lent to:
</label>
<input class="vTextField" id="id_lent_to" maxlength="64" name="lent_to" type="text"/>
</div>
<div class="help" id="id_lent_to_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-lent_from_date field-lent_until_date">
<div class="fieldBox field-lent_from_date">
<label for="id_lent_from_date">
Lent from date:
</label>
<input class="vDateField" id="id_lent_from_date" name="lent_from_date" size="10" type="text"/>
<div class="help">
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-lent_from_date">
<label for="id_lent_from_date">
Lent from date:
</label>
<p class="date">
<input class="vDateField" id="id_lent_from_date" name="lent_from_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_lent_from_date_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-lent_until_date">
<label class="inline" for="id_lent_until_date">
Lent until date:
</label>
<input class="vDateField" id="id_lent_until_date" name="lent_until_date" size="10" type="text"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-lent_until_date">
<label class="inline" for="id_lent_until_date">
Lent until date:
</label>
<p class="date">
<input class="vDateField" id="id_lent_until_date" name="lent_until_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_lent_until_date_helptext">
<div>
</div>
</div>
</div>
</div>
</div>
@ -253,28 +335,44 @@
Received
</h2>
<div class="form-row field-received_from field-received_date field-received_price">
<div class="fieldBox field-received_from">
<label for="id_received_from">
Received from:
</label>
<input class="vTextField" id="id_received_from" maxlength="64" name="received_from" type="text"/>
<div class="help">
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-received_from">
<label for="id_received_from">
Received from:
</label>
<input class="vTextField" id="id_received_from" maxlength="64" name="received_from" type="text"/>
</div>
<div class="help" id="id_received_from_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-received_date">
<label class="inline" for="id_received_date">
Received date:
</label>
<input class="vDateField" id="id_received_date" name="received_date" size="10" type="text"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-received_date">
<label class="inline" for="id_received_date">
Received date:
</label>
<p class="date">
<input class="vDateField" id="id_received_date" name="received_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_received_date_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-received_price">
<label class="inline" for="id_received_price">
Received price:
</label>
<input id="id_received_price" name="received_price" step="0.01" type="number"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-received_price">
<label class="inline" for="id_received_price">
Received price:
</label>
<input id="id_received_price" name="received_price" step="0.01" type="number"/>
</div>
<div class="help" id="id_received_price_helptext">
<div>
</div>
</div>
</div>
</div>
</div>
@ -284,28 +382,44 @@
Handed over
</h2>
<div class="form-row field-handed_over_to field-handed_over_date field-handed_over_price">
<div class="fieldBox field-handed_over_to">
<label for="id_handed_over_to">
Handed over to:
</label>
<input class="vTextField" id="id_handed_over_to" maxlength="64" name="handed_over_to" type="text"/>
<div class="help">
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-handed_over_to">
<label for="id_handed_over_to">
Handed over to:
</label>
<input class="vTextField" id="id_handed_over_to" maxlength="64" name="handed_over_to" type="text"/>
</div>
<div class="help" id="id_handed_over_to_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-handed_over_date">
<label class="inline" for="id_handed_over_date">
Handed over date:
</label>
<input class="vDateField" id="id_handed_over_date" name="handed_over_date" size="10" type="text"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-handed_over_date">
<label class="inline" for="id_handed_over_date">
Handed over date:
</label>
<p class="date">
<input class="vDateField" id="id_handed_over_date" name="handed_over_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_handed_over_date_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-handed_over_price">
<label class="inline" for="id_handed_over_price">
Handed over price:
</label>
<input id="id_handed_over_price" name="handed_over_price" step="0.01" type="number"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-handed_over_price">
<label class="inline" for="id_handed_over_price">
Handed over price:
</label>
<input id="id_handed_over_price" name="handed_over_price" step="0.01" type="number"/>
</div>
<div class="help" id="id_handed_over_price_helptext">
<div>
</div>
</div>
</div>
</div>
</div>
@ -369,7 +483,7 @@
<input class="vTextField" id="id_itemimagemodel_set-__prefix__-name" maxlength="255" name="itemimagemodel_set-__prefix__-name" type="text"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="Image Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_itemimagemodel_set-__prefix__-tags" name="itemimagemodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -432,7 +546,7 @@
<input class="vTextField" id="id_itemfilemodel_set-__prefix__-name" maxlength="255" name="itemfilemodel_set-__prefix__-name" type="text"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="File Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_itemfilemodel_set-__prefix__-tags" name="itemfilemodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -486,7 +600,7 @@
<input id="id_itemlinkmodel_set-__prefix__-item" name="itemlinkmodel_set-__prefix__-item" type="hidden"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="Link Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_itemlinkmodel_set-__prefix__-tags" name="itemlinkmodel_set-__prefix__-tags" type="text"/>
</div>
</td>

Wyświetl plik

@ -4,20 +4,23 @@
<title>
Change Item | PyInventory v0.18.1
</title>
<link href="/static/admin/css/base.css" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/nav_sidebar.css" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/base.css" rel="stylesheet"/>
<link href="/static/admin/css/dark_mode.css" rel="stylesheet"/>
<script defer="" src="/static/admin/js/theme.js">
</script>
<link href="/static/admin/css/nav_sidebar.css" rel="stylesheet"/>
<script defer="" src="/static/admin/js/nav_sidebar.js">
</script>
<link href="/static/admin/css/forms.css" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/forms.css" rel="stylesheet"/>
<meta content="notranslate" name="google"/>
<meta content="noindex,nofollow" name="robots">
<link href="/static/inventory.css" rel="stylesheet" type="text/css"/>
<script src="/admin/jsi18n/">
</script>
<link href="/static/adminsortable2/css/sortable.css" media="all" rel="stylesheet" type="text/css"/>
<link href="/static/ckeditor/ckeditor.css" media="all" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/vendor/select2/select2.min.css" media="screen" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/autocomplete.css" media="screen" rel="stylesheet" type="text/css"/>
<link href="/static/adminsortable2/css/sortable.css" media="all" rel="stylesheet"/>
<link href="/static/ckeditor/ckeditor.css" media="all" rel="stylesheet"/>
<link href="/static/admin/css/vendor/select2/select2.min.css" media="screen" rel="stylesheet"/>
<link href="/static/admin/css/autocomplete.css" media="screen" rel="stylesheet"/>
<script src="/static/admin/js/vendor/jquery/jquery.min.js">
</script>
<script src="/static/adminsortable2/js/adminsortable2.min.js">
@ -59,11 +62,14 @@
<script src="/static/admin/js/vendor/xregexp/xregexp.min.js">
</script>
<meta content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport"/>
<link href="/static/admin/css/responsive.css" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/responsive.css" rel="stylesheet"/>
<meta content="NONE,NOARCHIVE" name="robots"/>
</meta>
</head>
<body class="app-inventory model-itemmodel change-form" data-admin-utc-offset="MockedNowNode">
<a class="skip-to-content-link" href="#content-start">
Skip to main content
</a>
<!-- Container -->
<div id="container">
<!-- Header -->
@ -89,30 +95,58 @@
Change password
</a>
/
<a href="/admin/logout/">
Log out
</a>
<form action="/admin/logout/" id="logout-form" method="post">
MockedCsrfTokenNode
<button type="submit">
Log out
</button>
</form>
<button class="theme-toggle">
<div class="visually-hidden theme-label-when-auto">
Toggle theme (current theme: auto)
</div>
<div class="visually-hidden theme-label-when-light">
Toggle theme (current theme: light)
</div>
<div class="visually-hidden theme-label-when-dark">
Toggle theme (current theme: dark)
</div>
<svg aria-hidden="true" class="theme-icon-when-auto">
<use xlink:href="#icon-auto">
</use>
</svg>
<svg aria-hidden="true" class="theme-icon-when-dark">
<use xlink:href="#icon-moon">
</use>
</svg>
<svg aria-hidden="true" class="theme-icon-when-light">
<use xlink:href="#icon-sun">
</use>
</svg>
</button>
</div>
</div>
<!-- END Header -->
<div class="breadcrumbs">
<a href="/admin/">
Home
</a>
<a href="/admin/inventory/">
Inventory
</a>
<a href="/admin/inventory/itemmodel/">
Items
</a>
name
</div>
<nav aria-label="Breadcrumbs">
<div class="breadcrumbs">
<a href="/admin/">
Home
</a>
<a href="/admin/inventory/">
Inventory
</a>
<a href="/admin/inventory/itemmodel/">
Items
</a>
name
</div>
</nav>
<div class="main" id="main">
<button aria-label="Toggle navigation" class="sticky toggle-nav-sidebar" id="toggle-nav-sidebar">
</button>
<nav class="sticky" id="nav-sidebar">
<nav aria-label="Sidebar" class="sticky" id="nav-sidebar">
<input aria-label="Filter navigation items" id="nav-filter" placeholder="Start typing to filter…" type="search"/>
<div class="app-inventory module current-app">
<table>
@ -160,7 +194,7 @@
</table>
</div>
</nav>
<div class="content">
<div class="content" id="content-start" tabindex="-1">
<!-- Content -->
<div class="colM" id="content">
<h1>
@ -193,48 +227,62 @@
Internals
</h2>
<div class="form-row field-id field-version">
<div class="fieldBox field-id">
<label>
ID:
</label>
<div class="readonly">
<removed-uuid>
</removed-uuid>
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-id">
<label>
ID:
</label>
<div class="readonly">
<removed-uuid>
</removed-uuid>
</div>
</div>
<div class="help">
<div>
ID
</div>
</div>
</div>
<div class="help">
ID
</div>
</div>
<div class="fieldBox field-version errors">
<ul class="errorlist">
<li>
Version changed:
<pre>- 2
<div>
<ul class="errorlist">
<li>
Version changed:
<pre>- 2
+ 1</pre>
</li>
</ul>
<label class="required inline" for="id_version">
Version:
</label>
<input id="id_version" name="version" required="" type="hidden" value="1"/>
1
<div class="help">
Internal version number of this entry. Used to protect the overwriting of an older entry.
</li>
</ul>
<div class="flex-container fieldBox field-version errors">
<label class="required inline" for="id_version">
Version:
</label>
<input id="id_version" name="version" required="" type="hidden" value="1"/>
1
</div>
<div class="help" id="id_version_helptext">
<div>
Internal version number of this entry. Used to protect the overwriting of an older entry.
</div>
</div>
</div>
</div>
</div>
<div class="form-row field-user">
<div>
<label>
User:
</label>
<div class="readonly">
<a href="/admin/auth/user/1/change/">
NormalUser
</a>
<div class="flex-container">
<label>
User:
</label>
<div class="readonly">
<a href="/admin/auth/user/1/change/">
NormalUser
</a>
</div>
</div>
<div class="help">
The user who is the owner of this entry and can manage it (will be set automatically)
<div>
The user who is the owner of this entry and can manage it (will be set automatically)
</div>
</div>
</div>
</div>
@ -245,27 +293,35 @@
</h2>
<div class="form-row field-create_dt">
<div>
<label>
Create date:
</label>
<div class="readonly">
Jan. 1, 2000, 1:16 a.m.
<div class="flex-container">
<label>
Create date:
</label>
<div class="readonly">
Jan. 1, 2000, 1:11 a.m.
</div>
</div>
<div class="help">
(will be set automatically)
<div>
(will be set automatically)
</div>
</div>
</div>
</div>
<div class="form-row field-update_dt">
<div>
<label>
Last update:
</label>
<div class="readonly">
Jan. 1, 2000, 1:17 a.m.
<div class="flex-container">
<label>
Last update:
</label>
<div class="readonly">
Jan. 1, 2000, 1:12 a.m.
</div>
</div>
<div class="help">
(will be set automatically)
<div>
(will be set automatically)
</div>
</div>
</div>
</div>
@ -276,125 +332,165 @@
</h2>
<div class="form-row field-kind">
<div>
<label class="required" for="id_kind">
Kind:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list='["kind"]' data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 3, "space_delimiter": false, "required": true}' data-tagulous="true" data-theme="admin-autocomplete" id="id_kind" name="kind" required="" type="text" value="kind"/>
<div class="flex-container">
<label class="required" for="id_kind">
Kind:
</label>
<div class="related-widget-wrapper" data-model-ref="Item Kind">
<input autocomplete="off" data-tag-list='["kind"]' data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 3, "space_delimiter": false, "required": true}' data-tagulous="true" data-theme="admin-autocomplete" id="id_kind" name="kind" required="" type="text" value="kind"/>
</div>
</div>
<div class="help">
<div class="help" id="id_kind_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-producer field-name">
<div class="fieldBox field-producer">
<label for="id_producer">
Producer:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 1, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_producer" name="producer" type="text"/>
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-producer">
<label for="id_producer">
Producer:
</label>
<div class="related-widget-wrapper" data-model-ref="Item Producer">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 1, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_producer" name="producer" type="text"/>
</div>
</div>
<div class="help" id="id_producer_helptext">
<div>
</div>
</div>
</div>
<div class="help">
</div>
</div>
<div class="fieldBox field-name errors">
<ul class="errorlist">
<li>
changes between version 2 and 1:
<pre>- "name"
<div>
<ul class="errorlist">
<li>
changes between version 2 and 1:
<pre>- "name"
+ "A new Name!"</pre>
</li>
</ul>
<label class="required inline" for="id_name">
Name:
</label>
<input class="vTextField" id="id_name" maxlength="255" name="name" required="" type="text" value="A new Name!"/>
<div class="help">
Name
</li>
</ul>
<div class="flex-container fieldBox field-name errors">
<label class="required inline" for="id_name">
Name:
</label>
<input class="vTextField" id="id_name" maxlength="255" name="name" required="" type="text" value="A new Name!"/>
</div>
<div class="help" id="id_name_helptext">
<div>
Name
</div>
</div>
</div>
</div>
</div>
<div class="form-row field-description">
<div>
<label for="id_description">
Description:
</label>
<div class="django-ckeditor-widget" data-field-id="id_description" style="display: inline-block;">
<textarea cols="40" data-config='{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full": [["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"], ["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"], ["Smiley", "SpecialChar"], ["Source"]], "toolbar": "PyInventoryToolbarConfig", "height": "25em", "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "removeButtons": "Language,Cut,Copy,Paste,Undo,Redo,Anchor", "removePlugins": ["a11yhelp", "adobeair", "ajax", "autoembed", "autolink", "bbcode", "bidi", "clipboard", "codesnippet", "codesnippetgeshi", "contextmenu", "copyformatting", "devtools", "dialog", "dialogadvtab", "div", "divarea", "docprops", "embed", "embedbase", "embedsemantic", "enterkey", "exportpdf", "find", "flash", "forms", "htmlwriter", "iframe", "iframedialog", "language", "magicline", "mathjax", "newpage", "notification", "notificationaggregator", "pagebreak", "pastefromgdocs", "pastefromword", "pastetext", "pastetools", "placeholder", "preview", "print", "save", "scayt", "selectall", "sharedspace", "smiley", "sourcedialog", "specialchar", "stylescombo", "stylesheetparser", "tab", "templates", "uicolor", "widget", "wsc", "xml"], "toolbar_PyInventoryToolbarConfig": [{"name": "basicstyles", "items": ["Bold", "Italic", "Underline", "Strike", "-", "RemoveFormat"]}, {"name": "paragraph", "items": ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"]}, {"name": "links", "items": ["Link", "Unlink", "Anchor"]}, {"name": "insert", "items": ["Image", "Table", "HorizontalRule"]}, "/", {"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]}, {"name": "colors", "items": ["TextColor", "BGColor"]}, {"name": "tools", "items": ["Maximize", "ShowBlocks", "Source"]}, {"name": "about", "items": ["About"]}], "filebrowserUploadUrl": "/ckeditor/upload/", "filebrowserBrowseUrl": "/ckeditor/browse/", "language": "en"}' data-external-plugin-resources="[]" data-id="id_description" data-processed="0" data-type="ckeditortype" id="id_description" name="description" rows="10"></textarea>
<div class="flex-container">
<label for="id_description">
Description:
</label>
<div class="django-ckeditor-widget" data-field-id="id_description" style="display: inline-block;">
<textarea cols="40" data-config='{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full": [["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"], ["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"], ["Smiley", "SpecialChar"], ["Source"]], "toolbar": "PyInventoryToolbarConfig", "height": "25em", "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "removeButtons": "Language,Cut,Copy,Paste,Undo,Redo,Anchor", "removePlugins": ["a11yhelp", "adobeair", "ajax", "autoembed", "autolink", "bbcode", "bidi", "clipboard", "codesnippet", "codesnippetgeshi", "contextmenu", "copyformatting", "devtools", "dialog", "dialogadvtab", "div", "divarea", "docprops", "embed", "embedbase", "embedsemantic", "enterkey", "exportpdf", "find", "flash", "forms", "htmlwriter", "iframe", "iframedialog", "language", "magicline", "mathjax", "newpage", "notification", "notificationaggregator", "pagebreak", "pastefromgdocs", "pastefromword", "pastetext", "pastetools", "placeholder", "preview", "print", "save", "scayt", "selectall", "sharedspace", "smiley", "sourcedialog", "specialchar", "stylescombo", "stylesheetparser", "tab", "templates", "uicolor", "widget", "wsc", "xml"], "toolbar_PyInventoryToolbarConfig": [{"name": "basicstyles", "items": ["Bold", "Italic", "Underline", "Strike", "-", "RemoveFormat"]}, {"name": "paragraph", "items": ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"]}, {"name": "links", "items": ["Link", "Unlink", "Anchor"]}, {"name": "insert", "items": ["Image", "Table", "HorizontalRule"]}, "/", {"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]}, {"name": "colors", "items": ["TextColor", "BGColor"]}, {"name": "tools", "items": ["Maximize", "ShowBlocks", "Source"]}, {"name": "about", "items": ["About"]}], "filebrowserUploadUrl": "/ckeditor/upload/", "filebrowserBrowseUrl": "/ckeditor/browse/", "language": "en"}' data-external-plugin-resources="[]" data-id="id_description" data-processed="0" data-type="ckeditortype" id="id_description" name="description" rows="10"></textarea>
</div>
</div>
<div class="help">
<div class="help" id="id_description_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-tags">
<div>
<label for="id_tags">
Tags:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_tags" name="tags" type="text"/>
<div class="flex-container">
<label for="id_tags">
Tags:
</label>
<div class="related-widget-wrapper" data-model-ref="Item Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_tags" name="tags" type="text"/>
</div>
</div>
<div class="help">
<div class="help" id="id_tags_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-fcc_id">
<div>
<label for="id_fcc_id">
FCC ID:
</label>
<input class="vTextField" id="id_fcc_id" maxlength="20" name="fcc_id" type="text"/>
<div class="help">
Unique number from the FCC
<div class="flex-container">
<label for="id_fcc_id">
FCC ID:
</label>
<input class="vTextField" id="id_fcc_id" maxlength="20" name="fcc_id" type="text"/>
</div>
<div class="help" id="id_fcc_id_helptext">
<div>
Unique number from the FCC
</div>
</div>
</div>
</div>
<div class="form-row field-parent">
<div>
<label for="id_parent">
Parent:
</label>
<div class="related-widget-wrapper">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="parent" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_parent" lang="en" name="parent">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&amp;_popup=1" id="change_id_parent" title="Change selected Item">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/itemmodel/add/?_to_field=id&amp;_popup=1" id="add_id_parent" title="Add another Item">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&amp;_popup=1" id="delete_id_parent" title="Delete selected Item">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<div class="flex-container">
<label for="id_parent">
Parent:
</label>
<div class="related-widget-wrapper" data-model-ref="Item">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="parent" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_parent" lang="en" name="parent">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&amp;_popup=1" data-popup="yes" id="change_id_parent" title="Change selected Item">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" data-popup="yes" href="/admin/inventory/itemmodel/add/?_to_field=id&amp;_popup=1" id="add_id_parent" title="Add another Item">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&amp;_popup=1" data-popup="yes" id="delete_id_parent" title="Delete selected Item">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<a class="related-widget-wrapper-link view-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id" id="view_id_parent" title="View selected Item">
<img alt="View" src="/static/admin/img/icon-viewlink.svg"/>
</a>
</div>
</div>
<div class="help">
Locations can be nested. Example: The box 12 in cupboard 3
<div class="help" id="id_parent_helptext">
<div>
Locations can be nested. Example: The box 12 in cupboard 3
</div>
</div>
</div>
</div>
<div class="form-row field-location">
<div>
<label for="id_location">
Location:
</label>
<div class="related-widget-wrapper">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="location" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_location" lang="en" name="location">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&amp;_popup=1" id="change_id_location" title="Change selected Location">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/locationmodel/add/?_to_field=id&amp;_popup=1" id="add_id_location" title="Add another Location">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&amp;_popup=1" id="delete_id_location" title="Delete selected Location">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<div class="flex-container">
<label for="id_location">
Location:
</label>
<div class="related-widget-wrapper" data-model-ref="Location">
<select class="admin-autocomplete" data-ajax--cache="true" data-ajax--delay="250" data-ajax--type="GET" data-ajax--url="/admin/autocomplete/" data-allow-clear="true" data-app-label="inventory" data-field-name="location" data-model-name="itemmodel" data-placeholder="" data-theme="admin-autocomplete" id="id_location" lang="en" name="location">
<option value="">
</option>
</select>
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&amp;_popup=1" data-popup="yes" id="change_id_location" title="Change selected Location">
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
</a>
<a class="related-widget-wrapper-link add-related" data-popup="yes" href="/admin/inventory/locationmodel/add/?_to_field=id&amp;_popup=1" id="add_id_location" title="Add another Location">
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
</a>
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&amp;_popup=1" data-popup="yes" id="delete_id_location" title="Delete selected Location">
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
</a>
<a class="related-widget-wrapper-link view-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id" id="view_id_location" title="View selected Location">
<img alt="View" src="/static/admin/img/icon-viewlink.svg"/>
</a>
</div>
</div>
<div class="help">
<div class="help" id="id_location_helptext">
<div>
</div>
</div>
</div>
</div>
@ -405,34 +501,36 @@
</h2>
<div class="form-row field-related_items">
<div>
<label>
Related items:
</label>
<div class="readonly">
<table>
<thead>
<tr>
<th>
No.
</th>
<th>
Items
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
1
</td>
<td>
<a href="/admin/inventory/itemmodel/&lt;removed-UUID&gt;/change/">
name
</a>
</td>
</tr>
</tbody>
</table>
<div class="flex-container">
<label>
Related items:
</label>
<div class="readonly">
<table>
<thead>
<tr>
<th>
No.
</th>
<th>
Items
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
1
</td>
<td>
<a href="/admin/inventory/itemmodel/&lt;removed-UUID&gt;/change/">
name
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
@ -443,29 +541,47 @@
</h2>
<div class="form-row field-lent_to">
<div>
<label for="id_lent_to">
Lent to:
</label>
<input class="vTextField" id="id_lent_to" maxlength="64" name="lent_to" type="text"/>
<div class="help">
<div class="flex-container">
<label for="id_lent_to">
Lent to:
</label>
<input class="vTextField" id="id_lent_to" maxlength="64" name="lent_to" type="text"/>
</div>
<div class="help" id="id_lent_to_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-lent_from_date field-lent_until_date">
<div class="fieldBox field-lent_from_date">
<label for="id_lent_from_date">
Lent from date:
</label>
<input class="vDateField" id="id_lent_from_date" name="lent_from_date" size="10" type="text"/>
<div class="help">
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-lent_from_date">
<label for="id_lent_from_date">
Lent from date:
</label>
<p class="date">
<input class="vDateField" id="id_lent_from_date" name="lent_from_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_lent_from_date_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-lent_until_date">
<label class="inline" for="id_lent_until_date">
Lent until date:
</label>
<input class="vDateField" id="id_lent_until_date" name="lent_until_date" size="10" type="text"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-lent_until_date">
<label class="inline" for="id_lent_until_date">
Lent until date:
</label>
<p class="date">
<input class="vDateField" id="id_lent_until_date" name="lent_until_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_lent_until_date_helptext">
<div>
</div>
</div>
</div>
</div>
</div>
@ -475,28 +591,44 @@
Received
</h2>
<div class="form-row field-received_from field-received_date field-received_price">
<div class="fieldBox field-received_from">
<label for="id_received_from">
Received from:
</label>
<input class="vTextField" id="id_received_from" maxlength="64" name="received_from" type="text"/>
<div class="help">
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-received_from">
<label for="id_received_from">
Received from:
</label>
<input class="vTextField" id="id_received_from" maxlength="64" name="received_from" type="text"/>
</div>
<div class="help" id="id_received_from_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-received_date">
<label class="inline" for="id_received_date">
Received date:
</label>
<input class="vDateField" id="id_received_date" name="received_date" size="10" type="text"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-received_date">
<label class="inline" for="id_received_date">
Received date:
</label>
<p class="date">
<input class="vDateField" id="id_received_date" name="received_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_received_date_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-received_price">
<label class="inline" for="id_received_price">
Received price:
</label>
<input id="id_received_price" name="received_price" step="0.01" type="number"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-received_price">
<label class="inline" for="id_received_price">
Received price:
</label>
<input id="id_received_price" name="received_price" step="0.01" type="number"/>
</div>
<div class="help" id="id_received_price_helptext">
<div>
</div>
</div>
</div>
</div>
</div>
@ -506,28 +638,44 @@
Handed over
</h2>
<div class="form-row field-handed_over_to field-handed_over_date field-handed_over_price">
<div class="fieldBox field-handed_over_to">
<label for="id_handed_over_to">
Handed over to:
</label>
<input class="vTextField" id="id_handed_over_to" maxlength="64" name="handed_over_to" type="text"/>
<div class="help">
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-handed_over_to">
<label for="id_handed_over_to">
Handed over to:
</label>
<input class="vTextField" id="id_handed_over_to" maxlength="64" name="handed_over_to" type="text"/>
</div>
<div class="help" id="id_handed_over_to_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-handed_over_date">
<label class="inline" for="id_handed_over_date">
Handed over date:
</label>
<input class="vDateField" id="id_handed_over_date" name="handed_over_date" size="10" type="text"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-handed_over_date">
<label class="inline" for="id_handed_over_date">
Handed over date:
</label>
<p class="date">
<input class="vDateField" id="id_handed_over_date" name="handed_over_date" size="10" type="text"/>
</p>
</div>
<div class="help" id="id_handed_over_date_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="fieldBox field-handed_over_price">
<label class="inline" for="id_handed_over_price">
Handed over price:
</label>
<input id="id_handed_over_price" name="handed_over_price" step="0.01" type="number"/>
<div class="help">
<div>
<div class="flex-container fieldBox field-handed_over_price">
<label class="inline" for="id_handed_over_price">
Handed over price:
</label>
<input id="id_handed_over_price" name="handed_over_price" step="0.01" type="number"/>
</div>
<div class="help" id="id_handed_over_price_helptext">
<div>
</div>
</div>
</div>
</div>
</div>
@ -591,7 +739,7 @@
<input class="vTextField" id="id_itemimagemodel_set-__prefix__-name" maxlength="255" name="itemimagemodel_set-__prefix__-name" type="text"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="Image Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_itemimagemodel_set-__prefix__-tags" name="itemimagemodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -654,7 +802,7 @@
<input class="vTextField" id="id_itemfilemodel_set-__prefix__-name" maxlength="255" name="itemfilemodel_set-__prefix__-name" type="text"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="File Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_itemfilemodel_set-__prefix__-tags" name="itemfilemodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -708,7 +856,7 @@
<input id="id_itemlinkmodel_set-__prefix__-item" name="itemlinkmodel_set-__prefix__-item" type="hidden" value="&lt;removed-UUID&gt;"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="Link Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_itemlinkmodel_set-__prefix__-tags" name="itemlinkmodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -731,13 +879,11 @@
</div>
<div class="submit-row">
<input class="default" name="_save" type="submit" value="Save"/>
<p class="deletelink-box">
<a class="deletelink" href="/admin/inventory/itemmodel/&lt;removed-UUID&gt;/delete/">
Delete
</a>
</p>
<input name="_addanother" type="submit" value="Save and add another"/>
<input name="_continue" type="submit" value="Save and continue editing"/>
<a class="deletelink" href="/admin/inventory/itemmodel/&lt;removed-UUID&gt;/delete/">
Delete
</a>
</div>
<script async="" id="django-admin-form-add-constants" src="/static/admin/js/change_form.js">
</script>
@ -758,5 +904,27 @@
</div>
</div>
<!-- END Container -->
<!-- SVGs -->
<svg class="base-svgs" xmlns="http://www.w3.org/2000/svg">
<symbol height="1rem" id="icon-auto" viewbox="0 0 24 24" width="1rem">
<path d="M0 0h24v24H0z" fill="currentColor">
</path>
<path d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2V4a8 8 0 1 0 0 16z">
</path>
</symbol>
<symbol height="1rem" id="icon-moon" viewbox="0 0 24 24" width="1rem">
<path d="M0 0h24v24H0z" fill="currentColor">
</path>
<path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z">
</path>
</symbol>
<symbol height="1rem" id="icon-sun" viewbox="0 0 24 24" width="1rem">
<path d="M0 0h24v24H0z" fill="currentColor">
</path>
<path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z">
</path>
</symbol>
</svg>
<!-- END SVGs -->
</body>
</html>

Wyświetl plik

@ -11,38 +11,52 @@
Internals
</h2>
<div class="form-row field-id field-version">
<div class="fieldBox field-id">
<label>
ID:
</label>
<div class="readonly">
-
<div class="flex-container form-multiline">
<div>
<div class="flex-container fieldBox field-id">
<label>
ID:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
<div>
ID
</div>
</div>
</div>
<div class="help">
ID
</div>
</div>
<div class="fieldBox field-version">
<label class="required inline" for="id_version">
Version:
</label>
<input id="id_version" name="version" required="" type="hidden" value="0"/>
0
<div class="help">
Internal version number of this entry. Used to protect the overwriting of an older entry.
<div>
<div class="flex-container fieldBox field-version">
<label class="required inline" for="id_version">
Version:
</label>
<input id="id_version" name="version" required="" type="hidden" value="0"/>
0
</div>
<div class="help" id="id_version_helptext">
<div>
Internal version number of this entry. Used to protect the overwriting of an older entry.
</div>
</div>
</div>
</div>
</div>
<div class="form-row field-user">
<div>
<label>
User:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
User:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
The user who is the owner of this entry and can manage it (will be set automatically)
<div>
The user who is the owner of this entry and can manage it (will be set automatically)
</div>
</div>
</div>
</div>
@ -53,27 +67,35 @@
</h2>
<div class="form-row field-create_dt">
<div>
<label>
Create date:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
Create date:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
(will be set automatically)
<div>
(will be set automatically)
</div>
</div>
</div>
</div>
<div class="form-row field-update_dt">
<div>
<label>
Last update:
</label>
<div class="readonly">
-
<div class="flex-container">
<label>
Last update:
</label>
<div class="readonly">
-
</div>
</div>
<div class="help">
(will be set automatically)
<div>
(will be set automatically)
</div>
</div>
</div>
</div>
@ -84,36 +106,48 @@
</h2>
<div class="form-row field-name">
<div>
<label class="required" for="id_name">
Name:
</label>
<input class="vTextField" id="id_name" maxlength="255" name="name" required="" type="text"/>
<div class="help">
Name
<div class="flex-container">
<label class="required" for="id_name">
Name:
</label>
<input class="vTextField" id="id_name" maxlength="255" name="name" required="" type="text"/>
</div>
<div class="help" id="id_name_helptext">
<div>
Name
</div>
</div>
</div>
</div>
<div class="form-row field-memo">
<div>
<label for="id_memo">
Description:
</label>
<div class="django-ckeditor-widget" data-field-id="id_memo" style="display: inline-block;">
<textarea cols="40" data-config='{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full": [["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"], ["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"], ["Smiley", "SpecialChar"], ["Source"]], "toolbar": "PyInventoryToolbarConfig", "height": "25em", "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "removeButtons": "Language,Cut,Copy,Paste,Undo,Redo,Anchor", "removePlugins": ["a11yhelp", "adobeair", "ajax", "autoembed", "autolink", "bbcode", "bidi", "clipboard", "codesnippet", "codesnippetgeshi", "contextmenu", "copyformatting", "devtools", "dialog", "dialogadvtab", "div", "divarea", "docprops", "embed", "embedbase", "embedsemantic", "enterkey", "exportpdf", "find", "flash", "forms", "htmlwriter", "iframe", "iframedialog", "language", "magicline", "mathjax", "newpage", "notification", "notificationaggregator", "pagebreak", "pastefromgdocs", "pastefromword", "pastetext", "pastetools", "placeholder", "preview", "print", "save", "scayt", "selectall", "sharedspace", "smiley", "sourcedialog", "specialchar", "stylescombo", "stylesheetparser", "tab", "templates", "uicolor", "widget", "wsc", "xml"], "toolbar_PyInventoryToolbarConfig": [{"name": "basicstyles", "items": ["Bold", "Italic", "Underline", "Strike", "-", "RemoveFormat"]}, {"name": "paragraph", "items": ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"]}, {"name": "links", "items": ["Link", "Unlink", "Anchor"]}, {"name": "insert", "items": ["Image", "Table", "HorizontalRule"]}, "/", {"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]}, {"name": "colors", "items": ["TextColor", "BGColor"]}, {"name": "tools", "items": ["Maximize", "ShowBlocks", "Source"]}, {"name": "about", "items": ["About"]}], "filebrowserUploadUrl": "/ckeditor/upload/", "filebrowserBrowseUrl": "/ckeditor/browse/", "language": "en"}' data-external-plugin-resources="[]" data-id="id_memo" data-processed="0" data-type="ckeditortype" id="id_memo" name="memo" rows="10"></textarea>
<div class="flex-container">
<label for="id_memo">
Description:
</label>
<div class="django-ckeditor-widget" data-field-id="id_memo" style="display: inline-block;">
<textarea cols="40" data-config='{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full": [["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"], ["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"], ["Smiley", "SpecialChar"], ["Source"]], "toolbar": "PyInventoryToolbarConfig", "height": "25em", "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "removeButtons": "Language,Cut,Copy,Paste,Undo,Redo,Anchor", "removePlugins": ["a11yhelp", "adobeair", "ajax", "autoembed", "autolink", "bbcode", "bidi", "clipboard", "codesnippet", "codesnippetgeshi", "contextmenu", "copyformatting", "devtools", "dialog", "dialogadvtab", "div", "divarea", "docprops", "embed", "embedbase", "embedsemantic", "enterkey", "exportpdf", "find", "flash", "forms", "htmlwriter", "iframe", "iframedialog", "language", "magicline", "mathjax", "newpage", "notification", "notificationaggregator", "pagebreak", "pastefromgdocs", "pastefromword", "pastetext", "pastetools", "placeholder", "preview", "print", "save", "scayt", "selectall", "sharedspace", "smiley", "sourcedialog", "specialchar", "stylescombo", "stylesheetparser", "tab", "templates", "uicolor", "widget", "wsc", "xml"], "toolbar_PyInventoryToolbarConfig": [{"name": "basicstyles", "items": ["Bold", "Italic", "Underline", "Strike", "-", "RemoveFormat"]}, {"name": "paragraph", "items": ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"]}, {"name": "links", "items": ["Link", "Unlink", "Anchor"]}, {"name": "insert", "items": ["Image", "Table", "HorizontalRule"]}, "/", {"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]}, {"name": "colors", "items": ["TextColor", "BGColor"]}, {"name": "tools", "items": ["Maximize", "ShowBlocks", "Source"]}, {"name": "about", "items": ["About"]}], "filebrowserUploadUrl": "/ckeditor/upload/", "filebrowserBrowseUrl": "/ckeditor/browse/", "language": "en"}' data-external-plugin-resources="[]" data-id="id_memo" data-processed="0" data-type="ckeditortype" id="id_memo" name="memo" rows="10"></textarea>
</div>
</div>
<div class="help">
<div class="help" id="id_memo_helptext">
<div>
</div>
</div>
</div>
</div>
<div class="form-row field-tags">
<div>
<label for="id_tags">
Tags:
</label>
<div class="related-widget-wrapper">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_tags" name="tags" type="text"/>
<div class="flex-container">
<label for="id_tags">
Tags:
</label>
<div class="related-widget-wrapper" data-model-ref="Memo Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_tags" name="tags" type="text"/>
</div>
</div>
<div class="help">
<div class="help" id="id_tags_helptext">
<div>
</div>
</div>
</div>
</div>
@ -177,7 +211,7 @@
<input class="vTextField" id="id_memoimagemodel_set-__prefix__-name" maxlength="255" name="memoimagemodel_set-__prefix__-name" type="text"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="Image Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_memoimagemodel_set-__prefix__-tags" name="memoimagemodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -240,7 +274,7 @@
<input class="vTextField" id="id_memofilemodel_set-__prefix__-name" maxlength="255" name="memofilemodel_set-__prefix__-name" type="text"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="File Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_memofilemodel_set-__prefix__-tags" name="memofilemodel_set-__prefix__-tags" type="text"/>
</div>
</td>
@ -294,7 +328,7 @@
<input id="id_memolinkmodel_set-__prefix__-memo" name="memolinkmodel_set-__prefix__-memo" type="hidden"/>
</td>
<td class="field-tags">
<div class="related-widget-wrapper">
<div class="related-widget-wrapper" data-model-ref="Link Tags">
<input autocomplete="off" data-tag-list="[]" data-tag-options='{"case_sensitive": false, "force_lowercase": false, "max_count": 10, "space_delimiter": false, "required": false}' data-tagulous="true" data-theme="admin-autocomplete" id="id_memolinkmodel_set-__prefix__-tags" name="memolinkmodel_set-__prefix__-tags" type="text"/>
</div>
</td>

Wyświetl plik

@ -78,27 +78,24 @@ def test_normal_user_create_item(live_server, client, page: Page, png_image):
page.fill('//input[@id="id_name"]', 'TD-20 (8088)')
# Add a Link:
page.locator('text=Add another Link').click()
link_tags = page.locator(
'//input[@id="id_itemlinkmodel_set-0-tags"]/..//input[@role="searchbox"]'
)
link_tags.click()
link_tags.fill('a-link-tag')
link_tags.press('Enter')
page.locator('input[name="itemlinkmodel_set-0-name"]').fill('The First Link')
page.locator('input[name="itemlinkmodel_set-0-url"]').fill('http://test.tld/foo/bar')
page.get_by_role('link', name='Add another Link').click()
page.locator('#id_itemlinkmodel_set-0-url').click()
page.locator('#id_itemlinkmodel_set-0-url').fill('http://test.tld/foo/bar')
page.locator('#id_itemlinkmodel_set-0-name').click()
page.locator('#id_itemlinkmodel_set-0-name').fill('The First Link')
page.locator('#id_itemlinkmodel_set-0-tags').click()
page.locator('#id_itemlinkmodel_set-0-tags').fill('a-link-tag')
page.locator('#id_itemlinkmodel_set-0-tags').press('Tab')
# Add Image
page.locator("text=Add another Image").click()
choose_file = page.locator("input[name=\"itemimagemodel_set-0-image\"]")
choose_file.set_input_files(png_image.name)
page.fill("input[name=\"itemimagemodel_set-0-name\"]", "The Image Name")
image_tags = page.locator(
'//input[@id="id_itemimagemodel_set-0-tags"]/..//input[@role="searchbox"]'
)
image_tags.click()
image_tags.fill('a-image-tag')
image_tags.press("Enter")
page.get_by_role('link', name='Add another Image').click()
page.locator('#id_itemimagemodel_set-0-image').click()
page.locator('#id_itemimagemodel_set-0-image').set_input_files(png_image.name)
page.locator('#id_itemimagemodel_set-0-name').click()
page.locator('#id_itemimagemodel_set-0-name').fill('The Image Name')
page.locator('#id_itemimagemodel_set-0-tags').click()
page.locator('#id_itemimagemodel_set-0-tags').fill('a-image-tag')
page.locator('#id_itemimagemodel_set-0-tags').press('Tab')
assert ItemModel.objects.count() == 0