Django mptt Множественные ссылки на объекты класса

Мне нужно составить модель для специй. Некоторые специи могут состоять из других, или быть базовыми. Мне нужно что-то вроде TreeForeignKey с возможностью мультивыбора. Я пытался использовать TreeManyToManyField, но там я не могу установить null для базовых специй. Вот мой код:

class Goods(MPTTModel):
    category = models.ForeignKey(Category,
                                 related_name='goods',
                                 on_delete=models.SET_NULL,
                                 null=True)    
    name = models.CharField(max_length=150, db_index=True)
    parent = TreeManyToManyField(
        'self',
        blank=True,)

MPTT не подходит для того, о чем вы спрашиваете. В дереве каждый узел имеет только 1 родителя (или не имеет родителя для корневого узла). Но в вашем случае:

  • Комбинированная специя может быть сделана из многих базовых специй
  • Базовая специя может быть использована во многих комбинированных специях

Это отношение "многие ко многим". См. https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/

Ваша модель может выглядеть примерно так:

class Spice(models.Model):
    ingredients = models.ManyToManyField("self", blank=True)
Вернуться на верх