2016-06-14 2 views
1

У меня есть ниже модели, и я хочу, чтобы выполнить ниже запрос:Джанго обратная OneToOne связь с select_related

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) 

По какой-то причине не работает с next_post параметром, как я получаю следующее сообщение об ошибке:

raise IndexError("Number of args exceeds number of fields") IndexError: Number of args exceeds number of fields

Теоретически я могу жить без 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 в __init__, строка 372' – klis87

+0

Выше была последняя строка, в сообщении у вас есть доступ к полной трассе – klis87

ответ

2

Это похоже на ошибку в Django. Я могу воспроизвести в 1,8 и 1,9, но не в мастер-ветке.

Выполнение git bisect, tt, похоже, было исправлено ticket 26207, поэтому оно должно быть исправлено в Django 1.10.

Смежные вопросы