Подтвердить что ты не робот

Как получить определенный атрибут из набора запросов в Django?

У меня есть такой запрос:

file_s = Share.objects.filter(shared_user_id=log_id)

Теперь я хочу получить атрибут files_id из файла_файла в представлении Django. Как я могу это сделать?

4b9b3361

Ответ 1

Используйте values(), чтобы получить конкретный атрибут, который вернет вам список dicts, например

file_s = Share.objects.filter(shared_user_id=log_id).values('files_id')

EDIT: если вам нужен только один атрибут, вы можете использовать flat=True, чтобы предложить вернуть только список значений. Однако убедитесь, что в каком порядке будет список.

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).order_by('id')

Ответ 2

Ваш вызов Share.objects.filter() возвращает объект Djagno QuerySet, который не является отдельной записью, но итерабельность фильтрованных объектов из базы данных причем каждый элемент является экземпляром Share. Возможно, ваш вызов filter вернет более одного элемента.

Вы можете выполнить итерацию по QuerySet с помощью цикла, например:

for share in files_s:
    print share.files_id

Если вы знаете, что только ваш запрос будет возвращать только один элемент, вы можете сделать:

share = Share.objects.get(shared_user_id=log_id)

который вернет один экземпляр Share, из которого вы можете получить доступ к атрибуту files_id. Исключение будет вызвано, если запрос вернет ничего, кроме 1 результата.