Как получить определенный атрибут из набора запросов в Django?
У меня есть такой запрос:
file_s = Share.objects.filter(shared_user_id=log_id)
Теперь я хочу получить атрибут files_id из файла_файла в представлении Django. Как я могу это сделать?
Ответы
Ответ 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 результата.