igorsimb / mp-monitor

Django app for scraping Wildberries
1 stars 0 forks source link

Add Status field to Tenant model, add `indexex` to CustomUser and Tenant models #67

Closed igorsimb closed 6 months ago

igorsimb commented 6 months ago

main/models.py

class Tenant(models.Model):
    # in ORM can be referenced as tenant.Status.TRIALING
    class Status(models.IntegerChoices):
        TRIALING = 1, _("Trialing")
        ACTIVE = 2, _("Active")
        EXEMPT = 3, _("Exempt")  # for using service without paying, e.g. admins, etc
        CANCELED = 4, _("Canceled")
        TRIAL_EXPIRED = 5, _("Trial expired")

    name = models.CharField(max_length=255, unique=True)
    status = models.IntegerField(choices=Status.choices,default=Status.TRIALING)

    class Meta:
        verbose_name = "Организация"
        verbose_name_plural = "Организации"
        # speeds up database queries (https://docs.djangoproject.com/en/5.0/ref/models/options/#indexes)
        indexes = [
            models.Index(fields=["status"]),
        ]

    def __str__(self):  # pylint: disable=invalid-str-returned
        return self.name

accounts/models.py

class CustomUser(AbstractUser):
    tenant = models.ForeignKey(Tenant,
                               on_delete=models.CASCADE,
                               null=True,
                               blank=True,
                               related_name="users",
                               verbose_name="Организация"
                               )

    class Meta:
        indexes = [models.Index(fields=["tenant"]),]

    def save(self, *args, **kwargs):  # type: ignore
        if not self.tenant:
            self.tenant = Tenant.objects.create(name=self.email)
        super().save(*args, **kwargs)