Запуск различных() на любом поле комментария модель всегда возвращает все записи,django комментарий структура: отличная() не работает?
Comment.objects.values ('пользователь') различны()
[{ 'пользователь':. 1 }, {'user': 0}, {'user': 0}, {'user': 0}, {'user': 0}, {'user': 1}, {'user': 1} , { 'пользователь': 1}, { 'пользователь': 1}]
Comment.objects.values ('ip_address') различны()
[{ 'ip_address':. u'127.0.0.1 '}, {' ip_address ': u'192.168.0.180'}, {'ip_address': u'192.168.0.180 '}, {' ip_address ': u'192.168.0.180'}, {'ip_address': u'192.168.0. 180 '}, {' ip_address ': u'192.168.0.180'}, {'ip_address': u'192.168.0.180 '}, {' ip_address ': u'192.168.0.180'}, {'ip_address': u'192.168.0.180 '}]
Почему это происходит? Есть ли способ обойти это? Благодаря!
ps: distinct() отлично работает в разных типах полей пользовательской модели во время моего теста. Что-то особенное в структуре комментариев?
Битого заключение Спасибо всем, отвечая на этот вопрос, в сочетании с некоторым чтением я получаю вывод следующим образом:
- значения() влияет на поля поиска в SELECT, части окончательного SQL (»values() takes optional positional arguments, *fields, which specify field names to which the SELECT should be limited ")
- order_by() также добавляет свой параметр к части SELECT.
с использованием различных() в Ищут приведет к SQL, чтобы выглядеть следующим образом:
ВЫБОР DISTINCT [fields1, fields2, fields3] FROM ... WHERE ...
и значения полей вместе определяют, уникальна ли запись. Поля могут быть получены из функций value() или order_by() в поиске.
Джанго Комментарий имеет скрытый order_by параметр по умолчанию, создавая тем самым всю проблему. Любая модель имеет скрытый order_by при возврате qs может вызвать ту же проблему.
- Способ решения проблемы заключается в добавлении пустого order_by() в конец поиска, который удаляет по умолчанию order_by.
если OP ищет идентификаторы различных пользователей, как ваши решения не работают на всех –
@SimonKagwi И что же они вернуть? – DrTyrsa
Привет, DrTyrsa! Я использую django 1.3, а параметр distinct() не описан в этой версии. Вторая команда не работает для модели комментариев, но отлично подходит для пользовательской модели (например, то, что я сказал в PS). Но почему «ценности» не должны влиять на «отличное» поведение? Если вы не укажете django, какие значения столбца следует использовать для группировки, как он может знать, каким образом вы хотите рассматривать записи как уникальные? –