Проблема организации модели Django

Я разрабатываю модели рецептов и ингредиентов.

models.py:

class Recipe(models.Model):
    """Recipe structure"""
    author = models.ForeignKey(
        User, on_delete=models.CASCADE
        )
    title = models.CharField(max_length=40, unique=True)
    picture = models.ImageField(blank=True, null=True)
    text = models.TextField(max_length=100, blank=True, null=True)
    components = models.ManyToManyField('Component')
    tag = MultiSelectField(max_length=10, choices=tags)
    cooking_time = models.IntegerField(
        validators=[MinValueValidator(1, 'Value cannot be lower than 1')]
        )
    slug = models.SlugField()

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'recipes'
        verbose_name = 'Рецепт'
        verbose_name_plural = 'Рецепты'



class Component(models.Model):
    """Component structure"""
    title = models.CharField(max_length=50, unique=True)
    unit = models.CharField(max_length=10, choices=units)

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'components'
        verbose_name = 'Ингредиент'
        verbose_name_plural = 'Ингредиенты'


class Component_quantity(models.Model):
    """Table linking quantity with recipe and component together"""
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    component = models.ForeignKey(Component, on_delete=models.CASCADE)
    quantity = models.DecimalField(
        max_digits=5,
        decimal_places=1,
        verbose_name='Количество',
        validators=[MinValueValidator(1)]
        )

    class Meta:
        db_table = 'quantity_and_recipe_linking_table'
        unique_together = ('recipe', 'component')
        verbose_name = 'Ингредиент в рецепте'
        verbose_name_plural = 'Ингредиенты в рецепте'

Задача состоит в том, чтобы связать рецепт и компонент в модели Component_quantity таким образом, чтобы в поле компонента можно было выбрать только те сущности, которые указаны в самом рецепте. Возможно ли это сделать?

Я бы рекомендовал поместить поле количества непосредственно в модель Component. Другой способ сделать это - добавить внешний ключ quantity в модель Component, а затем удалить рецепт и внешний ключ компонента из модели Component_quantity.

Вернуться на верх