Как временно отключить отношения ForeignKey между моделями Django - PullRequest
0 голосов
/ 03 сентября 2018
class Season(models.Model):
    """
    unique season object  per clothing drop
    """
    name = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(max_length=250, unique=True)
    description = models.TextField(blank=True)
    image = models.ImageField(upload_to='season', blank=True)
    season_available = models.BooleanField(default=True)

    class Meta:
        """
        meta-data per season
        """
        ordering = ('name',)
        verbose_name = 'season'
        verbose_name_plural = 'seasons'

    def __str__(self):
        return '{}'.format(self.name)

Классовый сезон, который я хочу относить только к категории iff Одежда (категория)

class Category(models.Model):
    """
    categories for products
    """
    name = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(max_length=250, unique=True)
    description = models.TextField(blank=True)
    season = models.ForeignKey(Season, on_delete=models.CASCADE)

    class Meta:
        """
        meta-data per category
        """
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'
    def foreign_key_controller(self):
        """enable foreign key relationship with specific models."""


    def __str__(self):
        """

        :return: '{}'.format.(self.name)
        :rtype: str
        """
        return '{}'.format(self.name)

Класс категории для всех продуктов, не включая одежду.

class Apparel(models.Model):
    """
    unique product per category per season
    """
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    name = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(max_length=250, unique=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(decimal_places=2, max_digits=10)
    image = models.ImageField(upload_to='product', blank=True)
    stock = models.IntegerField()
    product_available = models.BooleanField(default=True)
    date_created = models.DateTimeField(auto_now_add=True)
    date_latest_update = models.DateTimeField(auto_now=True)

здесь я хочу создать функцию, используя if / else, чтобы отключить отношение к иностранному ключу между Season и Category всякий раз, когда иностранный ключ в Category ()! = Apparel.

    class Meta:
        """
        meta-data for product
        """
        ordering = ('name',)
        verbose_name = 'product'
        verbose_name_plural = 'products'

    def __str__(self):
        """
        readable representation of class
        :return:
        :rtype: str
        """
        return '{}'.format(self.name )

По сути, я только хочу, чтобы сезоны могли носить разные типы одежды. Также, если вам интересно, я не включил никаких других моделей, которые относятся к категории, кроме одежды, но в случае, если есть такие модели. Например, класс с именем Music может иметь отношение ForeignKey с Category, поэтому отношение внешнего ключа между категорией и сезоном будет отключено, если Category ссылается на Music.

Изначально я хотел просто создать отдельный класс, похожий на Category, но он имел бы только отношения с продуктами в магазине, которые не являются предметами одежды, и не имел отношения к Season, но должен быть лучший способ?

Спасибо!

...