Мы хотим, чтобы в одной и той же модели было много-много-много-однозначных отношений. Позвольте мне привести пример.
class Definition(models.Model):
value = models.CharField(max_length=100)
...
class Container(models.Model):
name = models.CharField(max_length=30)
container_specific_defn = models.OneToOneField(Definition, null=True, blank=True)
definitions = models.ManyToManyField(Definition)
Как вы можете видеть, модель Container
имеет как 1to1, так и м2м отн. С моделью Definition
. то есть. Я хочу, чтобы Container
мог иметь любое количество определений, но определение, которое мы собираемся добавить в набор definitions
, не следует добавлять в поле container_specific_defn
любого контейнера.
Но приведенный выше дизайн модели позволяетdefn
, который был назначен полю container_specific_defn
одного контактера для добавления в набор definitions
другого контейнера.
container_specific_defn = Definition.objects.create(value='container_specific')
global_defn = Definition.objects.create(value='global')
c1 = Container.objects.create(name='c1', container_specific_defn=container_specific_defn)
c2 = Container.objects.create(name='c2')
c2.definitions.add(container_specific_defn)
c2.save()
# [container_specific_defn]
Нужно ли менять дизайн модели?