我在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