Джанго: Определение того, проголосовал ли пользователь или нет

Функция sizeof возвращает количество байтов, которое используется вашим массивом в памяти. Если вы хотите вычислить количество элементов в вашем массиве, вы должны разделить это число на тип переменной sizeof массива. Скажем, int array[10];, если целочисленное целое число переменной на вашем компьютере равно 32 бит (или 4 байта), чтобы получить размер вашего массива, вы должны сделать следующее:

int array[10];
int sizeOfArray = sizeof(array)/sizeof(int);
1
задан Community 23 May 2017 в 12:30
поделиться

1 ответ

Я уже сталкивался с этим раньше и решил это с помощью extra более или менее примерно так:

# annotate whether you've already voted on this item
table = Vote._meta.db_table
select = 'SELECT COUNT(id) FROM %s' %table
where1 = 'WHERE ' + table + '.user_id = %s'
where2 = 'AND ' + table + '.item_id = appname_item.id'
items = items.extra(
        select={'votes':" ".join((select, where1, where2,))},
        select_params=(request.user.id,)
    )

Фактически, это принимает QuerySet элементов и аннотирует каждый из них либо 0, либо некоторым количеством голосов. . В моей системе я использую unique_topting = ('link', 'user') для голосования, чтобы каждый пользователь мог проголосовать только один раз, поэтому аннотированные данные равны 0 или 1 (фактически логическое значение). Он работает достаточно хорошо и позволяет избежать проблемы n + 1.

2
ответ дан 3 September 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: