[英]Django ManyToMany relationship not persisting
我在工作的Django应用程序中遇到了麻烦,当用户尝试创建多对多关系时,该关系不会持久。 不过,我可以通过管理界面创建此类关系。
这是一些我希望可以解释的代码。
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'
因此,ManyToMany关系似乎是在编辑阶段在foo.py中创建的,但并没有持久到应该显示给用户的位置。 任何人都可以建议这里发生了什么,或者我可能在哪里寻找进一步的线索?
由于通用名称,很难理解要执行的操作,但是我将尝试使用一些推荐的约定来重写您的代码,并希望它可以清除您遇到的所有错误:
def editFoo(request, foo_id):
try:
foo_obj = Foo.objects.get(id=foo_id)
except Foo.DoesNotExist:
... # Handle error here
... # More code here?
print foo_obj.linked_bar.count() # Prints current linked_bar count
linked_bar_id = request.POST.get('linked-bar-id', '')
try:
bar_obj = Bar.objects.get(id=linked_bar_id)
except Bar.DoesNotExist:
... # Handle error here
if bar_obj:
foo_obj.linked_bar.add(bar_obj)
print foo_obj.linked_bar.count() # Prints current linked_bar count
return redirect("/foo/" + foo_id) # Calls showFoo()
def showFoo(request, foo_id):
foo_obj = Foo.objects.get(id=foo_id)
... # More code here?
print foo_obj.linked_bar.count() # Prints current linked_bar count
return render(request, 'TEMPLATE.html', {'foo': foo_obj}) # Replace 'TEMPLATE.html' with your template name
原来,解决方案是在应用程序的其他地方添加了一些其他代码,这些代码在我添加到foo.linked_bar之后就删除了,最初我没有发现。 因此,最后一件琐碎的事情,但最令人讨厌。
由于有用的编码约定建议,我将接受其他答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.