我在Django应用程序中遇到了一个令人讨厌的问题,当我尝试创建多对多关系时,该关系不会持续存在。不过,我可以通过管理界面创建这种关系。Django ManyToMany的关系不存在
这里有一些代码,我希望可以解释它。
models.py:
class Foo(models.Model):
...
linked_bar = models.ManyToManyField(Bar, blank=True)
...
的意见/ foo.py:
def editFoo(request,foo_id):
fooQuery = Foo.objects.filter(id=foo_id)
if len(fooQuery) > 0:
foo = fooQuery.get(id=foo_id)
else:
# handle error &c.
...
print str(len(foo.linked_bar.all())) # prints '0'
linked_bar_id = request.POST.get('linked-bar-id', '')
barQuery = Bar.objects.filter(id=linked_bar_id)
if len(barQuery) > 0:
bar = barQuery.get(id=bar_id)
foo.linked_bar.add(bar)
print str(len(foo.linked_bar.all())) # prints '1'
return redirect("/foo/" + foo_id) # calls showFoo()
def showFoo(request,foo_id):
fooQuery = Foo.objects.filter(id=foo_id)
if len(fooQuery) > 0:
foo = fooQuery.get(id=foo_id)
...
print str(len(foo.linked_bar.all())) # prints '0'
因此,多对多的关系似乎正在在编辑阶段foo.py创建,但没有按”坚持它应该显示给用户的地方。任何人都可以提出可能在这里发生的事情,或者我可能在哪里寻找更多的线索?
谢谢。看到不同的约定很有趣。我继承了来自Rails背景的这个项目,并且我对Python不太熟悉。不幸的是,这不是约定的问题。其他事情似乎正在发生。 – knirirr
我还清除了重组之前的一些错误,现在对你有用吗?如果没有,然后粘贴您收到的错误,我会尽我所能提供帮助。 – Hybrid
我没有收到任何错误。代码似乎运行没有问题,但添加到linked_bar后,然后linked_bar.count()在showFoo中显示0,即关联不会持续。改变约定并没有什么区别,我想知道Django的胆量在哪里,我可能会试图去调试它。 – knirirr