У меня есть две модели, одна из которых (Bar
) имеет две связи M2M, указывающие на Foo
.ManyToManyField.add не имеет эффекта
class Foo(Model):
pass # Whatever
class Bar(Model):
foos = ManyToManyField(
Foo, blank=True, related_name="+")
bazs = ManyToManyField(
Foo, blank=True, related_name="+")
После создания проекта с помощью Django 1.8, ни один из этих полей не работают .add()
методы, так как demonstated ниже.
In [1]: foo = Foo.objects.first()
Out[2]: <Foo: ...>
In [3]: bar = Bar.objects.first()
Out[4]: <Bar: ...>
In [8]: bar.foos.add(foo)
In [9]: bar.foos.all()
Out[9]: []
In [11]: bar.save()
In [12]: bar.foos.all()
Out[12]: []
Документация ManyToManyField
является here.
Документация для related_name
: here. Используется потому, что обратные связанные имена для Bar
в противном случае конфликтуют с Foo
.
Каково рекомендуемое решение?
Вы пытались изменить 'related_name'? Используйте разные для каждого поля. – Gocht
@Gocht Да, я пробовал это. Это создает обратные отношения от Foo to Bar, что не то, что мы/я хочу в этом случае – Brian
Одна вещь, которую вам нужно иметь в виду при добавлении объектов в поле M2M, заключается в том, что добавленный объект (foo в этом случае) должен быть предварительно сохранен, не так ли? – Gocht