kopia lustrzana https://github.com/jedie/PyInventory
110 wiersze
3.1 KiB
Python
110 wiersze
3.1 KiB
Python
import logging
|
|
from pathlib import Path
|
|
|
|
from bx_django_utils.filename import clean_filename
|
|
from ckeditor_uploader.fields import RichTextUploadingField
|
|
from django.db import models
|
|
from django.urls import reverse
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django_tools.model_version_protect.models import VersionProtectBaseModel
|
|
from django_tools.serve_media_app.models import user_directory_path
|
|
|
|
from inventory.models.base import BaseMemoAttachmentModel, BaseModel
|
|
from inventory.models.links import BaseLink
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class MemoModel(BaseModel, VersionProtectBaseModel):
|
|
"""
|
|
A Memo to hold some information independ of items/location
|
|
"""
|
|
|
|
memo = RichTextUploadingField(
|
|
blank=True,
|
|
null=True,
|
|
config_name='MemoModel.description',
|
|
verbose_name=_('MemoModel.description.verbose_name'),
|
|
help_text=_('MemoModel.description.help_text'),
|
|
)
|
|
|
|
def local_admin_link(self):
|
|
url = reverse('admin:inventory_memomodel_change', args=[self.id])
|
|
return url
|
|
|
|
class Meta:
|
|
verbose_name = _('MemoModel.verbose_name')
|
|
verbose_name_plural = _('MemoModel.verbose_name_plural')
|
|
|
|
|
|
class MemoLinkModel(BaseLink):
|
|
memo = models.ForeignKey(MemoModel, on_delete=models.CASCADE)
|
|
|
|
def full_clean(self, **kwargs):
|
|
if self.user_id is None:
|
|
# inherit owner of this link from item instance
|
|
self.user_id = self.memo.user_id
|
|
return super().full_clean(**kwargs)
|
|
|
|
class Meta:
|
|
verbose_name = _('MemoLinkModel.verbose_name')
|
|
verbose_name_plural = _('MemoLinkModel.verbose_name_plural')
|
|
ordering = ('position',)
|
|
|
|
|
|
class MemoImageModel(BaseMemoAttachmentModel):
|
|
"""
|
|
Store images to Memos
|
|
"""
|
|
|
|
image = models.ImageField(
|
|
upload_to=user_directory_path,
|
|
verbose_name=_('MemoImageModel.image.verbose_name'),
|
|
help_text=_('MemoImageModel.image.help_text'),
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.name or self.image.name
|
|
|
|
def full_clean(self, **kwargs):
|
|
# Set name by image filename:
|
|
if not self.name:
|
|
filename = Path(self.image.name).name
|
|
self.name = clean_filename(filename)
|
|
|
|
return super().full_clean(**kwargs)
|
|
|
|
class Meta:
|
|
verbose_name = _('MemoImageModel.verbose_name')
|
|
verbose_name_plural = _('MemoImageModel.verbose_name_plural')
|
|
ordering = ('position',)
|
|
|
|
|
|
class MemoFileModel(BaseMemoAttachmentModel):
|
|
"""
|
|
Store files to Memos
|
|
"""
|
|
|
|
file = models.FileField(
|
|
upload_to=user_directory_path,
|
|
verbose_name=_('MemoFileModel.file.verbose_name'),
|
|
help_text=_('MemoFileModel.file.help_text'),
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.name or self.file.name
|
|
|
|
def full_clean(self, **kwargs):
|
|
# Set name by filename:
|
|
if not self.name:
|
|
filename = Path(self.file.name).name
|
|
self.name = clean_filename(filename)
|
|
|
|
return super().full_clean(**kwargs)
|
|
|
|
class Meta:
|
|
verbose_name = _('MemoFileModel.verbose_name')
|
|
verbose_name_plural = _('MemoFileModel.verbose_name_plural')
|
|
ordering = ('position',)
|