Модель дизайна Django - при изменении данных поля состояния статус остальных моделей изменяется вместе с ним - PullRequest
0 голосов
/ 24 января 2019

Это мой первый опыт использования django в качестве моего первого программного проекта.

У меня есть иерархическая структура Компании -> Бизнес -> Торговые точки, использующие внешний ключ.

Я хотел бы знать, есть ли в любом случае его структурированная таким образом, что статус Компании сохраняется какнеактивный статус, оставшиеся бизнес-модели, модели торговых точек, которые будут активированы как неактивные.

from django.db import models
from django.contrib.auth.models import User


# Create your models here.
class Common_Info(models.Model):
    """(Common description)"""
    name = models.CharField(blank=True, max_length=100)
    slug = models.SlugField(unique=True, max_length=120)
    address_1 = models.CharField(max_length=50, null=True)
    address_2 = models.CharField(max_length=50, null=True)
    address_3 = models.CharField(max_length=50, null=True)
    post_code = models.CharField(max_length=6, null=False)
    registration_no. = models.CharField(max_length=15,null=False)
    gst_no. = models.CharField(max_length=15,null=True)
    telphone_no. = models.CharField(max_legth=15, null=False)
    fax_no. = models.CharField(max_legth=15, null=True)
    email_address = models.EmailField(max_length=254,null=False)
    """(Status choice)"""
    Active_Status = 1
    Inactive_Status = 0
    STATUS_CHOICES = (
        (Active_Status, 'Active'),
        (Inactive_Status, 'Inactive'),
    )
    status = models.IntegerField(choices=STATUS_CHOICES, default=Active_Status)
    create_date = models.DateTimeField(auto_now_add=True)
    create_user = models.ForeignKey(settings.AUTH_USER_MODEL)
    modified_date = models.DateTimeField(auto_now_add=True)
    modified_user = models.ForeignKey(settings.AUTH_USER_MODEL)

    class Meta:
        abstract = True

class Company(Common_Info):
    """(Company additional description)"""
    gst_no. = models.CharField(max_length=15,null=True)

    class Meta:
        verbose_name ='Company'
        verbose_name_plural = "Companies"

    def __unicode__(self):
        return u"Company"

class Business(Common_Info):
    """(Business description)"""
    parent=models.ForeignKey(Company, on_delete=models.CASCADE)
    gst_no. = models.CharField(max_length=15,null=True)

    class Meta:
        verbose_name ='Business'
        verbose_name_plural = "Businesses"

    def __unicode__(self):
        return u"Business"

class Outlet(Common_Info):
    outlet_code = models.CharField(max_length=3, unique=True)
    business_name = models.ForeignKey(Business, on_delete=models.CASCADE)

    def __unicode__(self):
        return u"Outlet"

Есть ли что-то похожее на каскад при удалении или другой более элегантный способ распространения такой функции на другие приложения в проекте.

1 Ответ

0 голосов
/ 24 января 2019

Я не думаю, что есть прямая поддержка в ORM.Но вы можете переопределить метод save(), чтобы обновить связанные торговые точки и бизнес.Вы можете использовать связанных объектов , чтобы выбрать бизнес и торговые точки.Вот пример:

class Company(Common_Info):
    """(Company additional description)"""
    gst_no. = models.CharField(max_length=15,null=True)

    class Meta:
        verbose_name ='Company'
        verbose_name_plural = "Companies"

    def __unicode__(self):
        return u"Company"

    def save(self, *args, **kwargs):
        super(Company, self).save(*args, **kwargs)
        if self.status == 0:
             self.business_set.update(status=self.status)
             self.outlet_set.update(status=self.status)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...