2021-08-22 20:10:29 +02:00
|
|
|
from django.db import models
|
2021-09-26 19:02:25 +02:00
|
|
|
from django.urls import reverse
|
2021-09-25 20:31:08 +02:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
2021-10-17 18:54:30 +02:00
|
|
|
from sorl.thumbnail import ImageField
|
2021-08-22 20:10:29 +02:00
|
|
|
|
2021-08-29 22:09:22 +02:00
|
|
|
from characters.models import Character
|
2022-07-05 18:37:21 +02:00
|
|
|
from common.models import DescriptionModel, HistoryModel, AliasModel
|
2021-09-06 20:34:43 +02:00
|
|
|
from locations.models import Location
|
2022-04-11 22:43:06 +02:00
|
|
|
from search.utils import NameSearchIndex
|
2021-10-17 18:54:30 +02:00
|
|
|
from utils.random_filename import get_file_path
|
2021-08-22 20:10:29 +02:00
|
|
|
|
|
|
|
|
2022-11-19 17:40:46 +01:00
|
|
|
class LootType(models.Model):
|
|
|
|
name = models.CharField(_("Name"), max_length=1000)
|
|
|
|
|
2022-11-19 17:43:05 +01:00
|
|
|
def __str__(self):
|
|
|
|
return self.name
|
|
|
|
|
2022-11-19 17:40:46 +01:00
|
|
|
|
2022-07-05 18:37:21 +02:00
|
|
|
class Loot(DescriptionModel, AliasModel, HistoryModel):
|
2021-09-25 20:31:08 +02:00
|
|
|
name = models.CharField(_("Name"), max_length=1000)
|
|
|
|
quantity = models.PositiveSmallIntegerField(_("Quantity"))
|
|
|
|
value_gold = models.DecimalField(_("Value (Gold)"), max_digits=7, decimal_places=2)
|
|
|
|
weight = models.FloatField(_("Weight (lb)"), null=True, blank=True)
|
2021-10-17 18:54:30 +02:00
|
|
|
image = ImageField(_("Image"), upload_to=get_file_path, blank=True, null=True)
|
2021-10-04 21:30:33 +02:00
|
|
|
owner = models.ForeignKey(
|
|
|
|
Character, on_delete=models.PROTECT,
|
|
|
|
blank=True, null=True,
|
|
|
|
verbose_name=_("Claimant"),
|
|
|
|
related_name="loot"
|
|
|
|
)
|
|
|
|
location = models.ForeignKey(
|
|
|
|
Location, on_delete=models.PROTECT,
|
|
|
|
blank=True, null=True,
|
|
|
|
verbose_name=_("Location"),
|
|
|
|
related_name="loot"
|
|
|
|
)
|
2021-09-25 20:31:08 +02:00
|
|
|
magic_item = models.BooleanField(_("Magic Item"), default=False)
|
2022-11-19 17:40:46 +01:00
|
|
|
former = models.BooleanField(_("Former"), default=False)
|
|
|
|
type = models.ForeignKey(
|
|
|
|
LootType, on_delete=models.PROTECT,
|
|
|
|
blank=True, null=True,
|
|
|
|
verbose_name=_("Type"), related_name="loot"
|
|
|
|
)
|
2021-08-22 20:10:29 +02:00
|
|
|
|
2021-08-28 19:52:07 +02:00
|
|
|
class Meta:
|
|
|
|
ordering = ["name"]
|
2021-09-25 20:31:08 +02:00
|
|
|
verbose_name = _("Loot")
|
|
|
|
verbose_name_plural = _("Loot")
|
2022-04-11 22:43:06 +02:00
|
|
|
indexes = [
|
|
|
|
NameSearchIndex
|
|
|
|
]
|
2022-07-05 18:37:21 +02:00
|
|
|
|
2021-08-22 20:10:29 +02:00
|
|
|
@property
|
|
|
|
def value_per_unit(self):
|
|
|
|
return self.value_gold / self.quantity
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.name
|
2021-09-26 19:02:25 +02:00
|
|
|
|
|
|
|
def get_absolute_url(self):
|
|
|
|
return reverse('lootedit', args=[self.id])
|