2016-06-14 9 views
1
select_related

とOneToOne関係を逆転して、私は、クエリの下に実行したい:Djangoは、私がモデルの下に持って

raise IndexError("Number of args exceeds number of fields") IndexError: Number of args exceeds number of fields:私は次のエラーを取得するよう、それはnext_postパラメータでは動作しませんいくつかの理由について

Post.objects.select_related(
    'previous_post', 'next_post' 
).get(id=some_id) 


# models.py 
class Post(models.Model): 
    title = models.CharField(max_length=60, unique=True) 
    description = models.TextField() 
    content = models.TextField() 
    previous_post = models.OneToOneField('self', null=True, blank=True, 
             related_name='next_post', 
             on_delete=models.PROTECT) 

理論的に私はselect_relatedなしで暮らすことができますが、私はこのケースでそれをあきらめたくないと思っています。私は何か間違っているのか、それともちょうどDjangoのバグでしょうか?

完全トレースバック:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/query.py", line 381, in get 
    num = len(clone) 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/query.py", line 240, in __len__ 
    self._fetch_all() 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/query.py", line 72, in __iter__ 
    rel_populator.populate(row, obj) 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/query.py", line 1715, in populate 
    obj = self.model_cls.from_db(self.db, self.init_list, obj_data) 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/base.py", line 460, in from_db 
    new = cls(*values) 
    File "/home/konrad/PycharmProjects/jdg/env/lib/python3.4/site-packages/django/db/models/base.py", line 372, in __init__ 
    raise IndexError("Number of args exceeds number of fields") 
IndexError: Number of args exceeds number of fields 
+0

完全なトレースバックを表示できますか? – Alasdair

+0

'env/lib/python3.4/site-packages/django/db/models/base.py in __init__ in line 372' – klis87

+0

上記は最後の行で、ポストでは完全なトレースバックにアクセスできます – klis87

答えて

2

それはジャンゴのバグのように見えます。 1.8と1.9では再現できますが、マスターブランチでは再現できません。

git bisectを実行すると、ttはticket 26207で修正されているようですので、Django 1.10で修正する必要があります。

関連する問題