ADD: Models & Admin

This commit is contained in:
e-serg 2024-04-14 16:15:15 +03:00
parent 5db00f4028
commit 5d6f56e9ec
2 changed files with 133 additions and 0 deletions
rosmorport_tsts/rosmorport_tsts

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from rosmorport_tsts.models import TbPetsClones
@admin.register(TbPetsClones)
class AdminTbPetsClones(admin.ModelAdmin):
search_fields = ['szPetName', 'szPetSerNum', 'szPetOwner']
list_display = ['szPetName', 'szPetSerNum', 'szPetOwner', 'szPetPrice', 'dtPetCreate']
list_display_links = ('szPetName', 'szPetSerNum')
list_filter = ('iPetType', 'iPetSex', 'bPetIsAlive')
empty_value_display = '<b style=\'color:red;\'>—//—</b>'
actions_on_top = False
actions_on_bottom = False
def has_delete_permission(self, request, obj=None):
# запрет кнопки "удалить" в админке
return False

View File

@ -0,0 +1,115 @@
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
from django.utils.timezone import now
from rosmorport_tsts.settings import *
import pytils
import random
class TbPetsClones(models.Model):
"""Модель для хранения клонов питомцев"""
class PetType(models.IntegerChoices):
"""Тип питомца"""
DOG = 1, "Собака"
CAT = 2, "Кошка"
BIR = 3, "Птица"
ROD = 4, "Грызун"
REP = 5, "Рептилия"
OTH = 0, "Неизвестная зверушка"
class PetSex(models.IntegerChoices):
"""Пол питомца"""
MA = 1, "Мужской"
FE = 2, "Женский"
UN = 0, "Неизвестно"
iPetType = models.SmallIntegerField(
default=PetType.OTH,
choices=PetType.choices,
db_index=True,
verbose_name="Тип питомца"
)
szPetName = models.CharField(
max_length=64,
verbose_name="Имя образца",
help_text='Имя исходного биологического объекта, с которого изготовлен клон'
)
szPetSerNum = models.CharField(
max_length=25,
db_index=True,
unique=True,
null=True,
blank=True,
verbose_name="Серийный номер клонированного питомца",
help_text='Можно не заполнять. Номер будет сгенерирован автоматически'
)
iPetSex = models.SmallIntegerField(
default=PetSex.UN,
choices=PetSex.choices,
db_index=True,
verbose_name="Пол питомца"
)
bPetIsAlive = models.BooleanField(
default=True,
db_index=True,
verbose_name="Клон жив"
)
szPetOwner = models.CharField(
max_length=64,
null=True,
blank=True,
verbose_name="Владелец клонированного питомца"
)
szPetPrice = models.DecimalField(
max_digits=10,
decimal_places=2,
default=random.randint(1000, 10000),
null=True,
blank=True,
verbose_name="Цена клонированного питомца"
)
szPetComment = models.TextField(
null=True,
blank=True,
verbose_name="Комментарии",
help_text='Дополнительная информация о клоне'
)
dtPetCreate = models.DateTimeField(
auto_now_add=True, # надо указать False при миграции, после вернуть в True
# для выполнения миграций нужно добавлять default, а после она не нужна
verbose_name="Дата Создания"
)
dtPetTimeStamp = models.DateTimeField(
auto_now=True, # надо указать False при миграции, после вернуть в True
# для выполнения миграций нужно добавлять default, а после она не нужна
verbose_name="Штамп времени"
)
def __unicode__(self):
return f"{self.szPetName} - {self.szPetSerNum}"
def __str__(self):
return self.__unicode__()
def save(self, *args, **kwargs):
if not self.pk:
# если объект новый, то генерируем серийный номер
self.szPetSerNum = (f"{pytils.translit.slugify(self.szPetName)[:3].upper()}"
f"-{self.iPetType:02d}"
f"-{self.iPetSex:02d}"
f"-{now().strftime('%y%m%d-%H%M%S')}"
f"_{now().strftime('%f')[0:2]}")
super().save(*args, **kwargs)
def delete(self, *args, **kwargs):
# запрет на удаление записи
return
class Meta:
verbose_name = "Клон питомца"
verbose_name_plural = "Клоны питомцев"
db_table = "tb_pets_clones"
ordering = ["szPetSerNum", "szPetName",]