我在我正在使用的 Django 应用程序中遇到了一个麻烦,当用户尝试创建多对多关系时,该关系不会持续存在。不过,我可以通过管理界面创建此类关系。
这是一些我希望可以解释的代码。
模型.py:
class Foo(models.Model):
...
linked_bar = models.ManyToManyField(Bar, blank=True)
...
View /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
关于python - Django ManyToMany 关系不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34632332/