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)