这是PyCharm 4.0.5中的错误吗?

时间:2015-03-11 13:58:20

标签: django python-3.x pycharm

我昨天更新到PyCharm 4.0.5,从那以后它已经将一些完全有效的代码标记为错误。基本上代码只是遍历ManyToMany关系。代码如下所示。

songs = []
for album in order.album_products.all():
    album_songs = Song.objects.filter(album__exact=album.album_product.id)
    if not album_songs:
        for song in album_songs:
            songs.append(song)

显示错误的行是这一行:

for album in order.album_products.all():

,显示的错误是这个:

Call 'all' directly on 'many-to-many with intermediate'. method 'all' can't be used with many-to-many relations if intermediate model is used.

我很难过这个。只要我记得,这段代码在Django中运行良好。我从版本1.0或1.1开始就一直在使用Django,并且总是使用这种方法迭代ManyToMany关系。另外,查看Stackoverflow答案也会显示许多其他人使用的相同代码。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:15)

对我来说似乎是个错误。我不知道在哪里

  

方法'所有'如果使用中间模型,则不能与多对多关系一起使用。

来自,但我没有在Django文档中找到它。事实上,Django docs在一个例子中使用它,在"Extra fields on many-to-many relationships"

部分
>>> beatles.members.all()

此错误在PyCharm中为already reported

答案 1 :(得分:1)

对于答案感到好奇,因为https://docs.djangoproject.com/en/1.7/topics/db/models/#extra-fields-on-many-to-many-relationships显示与beatles.members.all()相同的代码。但在这种情况下,使用错误中提到的intermediate model可能会更有效。

但请注意,您对album_products的每张专辑都会进行两次查询,因为album.album_product.id是一个查询。

   album_songs = Song.objects.filter(album__album_product=album.album_product_id)