Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 24, 2014 18:42:37

chaotism
От:
Зарегистрирован: 2010-11-29
Сообщения: 76
Репутация: +  1  -
Профиль   Отправить e-mail  

django ORM методы extra и annotate

пытаюсь сделать сортировку по связаной таблице в которой должен быть фильтр

SELECT S.* 
FROM source S
LEFT JOIN source_processing SP ON SP.source_id = S.id AND SP.oper_type = 'cloud_detection'
ORDER BY label DESC
GROUP BY S.id,
пробовал сделать в питоне вначале через annotate, но не знал как вставить SP.oper_type = 'cloud_detection
попробовал через extra, но там я не понимаю логику действия, если делаешь полный селект вылезает ошибка что количество строк(row)больше одной, а вставить текущий id я не знаю как:
class SourceProcessing(models.Model):
    """
    Обработка источника данных.
    """
    task = models.ForeignKey('task.Task', db_column='task_id', blank=True, null=True)
    source = models.ForeignKey('Source', db_column='source_id')
    operation_type = models.ForeignKey('operation.OperationType', db_column='oper_type')
    operation_status = models.ForeignKey('task.StatusType', db_column='oper_status')
    log = models.ForeignKey('common.Log', blank=True, null=True, db_column='log_id')
    comment = models.CharField(max_length=200, db_column='comment', verbose_name='комментарий')
    label = models.CharField(max_length=10, db_column='label', verbose_name='метка', blank=True, null=True)
    result_type = models.ForeignKey('task.ResultType', db_column='result_type', blank=True, null=True)
    result_obj_id = models.IntegerField(blank=True, null=True, db_column='result_id')
####################################
Source.objects.all().extra(select={'obj_sorting_value':'''
        SELECT SP.label
        FROM source S
        LEFT JOIN source_processing SP
        ON SP.source_id = S.id AND SP.oper_type = 'cloud_detection' AND S.id = %s
        '''},
        params=["КАК СЮДА ВСТАВИТЬ source.id"]
        ).order_by(obj_sorting_value))



Отредактировано chaotism (Июнь 24, 2014 18:43:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version