### Models class base(models.Model): created_by = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.CASCADE, editable=False, null=True, blank=True) created = models.DateTimeField(_("created date"), auto_now=False, auto_now_add=True, editable=False) class Meta: abstract = True # Level 1 model class Building(base): name = models.CharField(_("Name"), max_length=50) managers = models.ManyToManyField(User, verbose_name=_("Admins"), related_name='buildingmanagers') class Meta: verbose_name = _("building") verbose_name_plural = _("buildings") def __str__(self): return self.name def get_absolute_url(self): return reverse("building_detail", kwargs={"pk": self.pk}) # Level 2 # list should be on /buildings//properties # Details could be on either # /buildings//properties/ # /properties/ class Property(base): name = models.CharField(_("Nombre de la propiedad"), max_length=50) building = models.ForeignKey("core.Building", verbose_name=_("Edificio"), on_delete=models.CASCADE) owner = models.CharField(_("Nombre propietario"), max_length=50, blank=True, null=True) class Meta: verbose_name = _("property") verbose_name_plural = _("propertys") def __str__(self): return self.name def get_absolute_url(self): return reverse("property_detail", kwargs={"pk": self.pk}) # Level 3 # list should be on # /buildings//properties//invoices # or /properties//invoices # Details could be on either # /buildings//properties//invoices/ # /property_invoices/ class PropertyInvoice(invoice_base): prop = models.ForeignKey(Property, verbose_name=_("Property"), on_delete=models.CASCADE) class Meta: verbose_name = _("property invoice") verbose_name_plural = _("property invoices") def __str__(self): return self.concept def get_absolute_url(self): return reverse("propertyinvoice_detail", kwargs={"pk": self.pk}) def get_building(self): return self.prop.building # Level 4 # list should be on # /buildings//properties//invoices//payments # or /property_invoices//payments # Details could be on either # /buildings//properties//invoices//payments/ # /property_payments/ class PropertyInvoicePayment(payment_base): invoice = models.ForeignKey("core.PropertyInvoice", verbose_name=_("Related Invoice"), on_delete=models.CASCADE) def get_building(self): return self.invoice.prop.building