Добавление значений в Django QuerySet - PullRequest
0 голосов
/ 29 января 2019

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

Например, чтобы узнать, закрыто ли хранилище, я могу запустить функцию с именем get_closed_stores(), которая возвращает списокзакрытые магазины.

Магазины закрыты

[00090, 00240, 00306, 00438, 03005, 05524]

Отлично, теперь у нас есть номера магазинов для закрытых магазинов.Давайте получим эти фактические объекты магазина.

Запрос

Store.objects.filter(
store_number__in=[00090, 00240, 00306, 00438, 03005, 05524]
)

Теперь у нас есть QuerySet, но у нас нет абсолютно никакого способа обнаружить, когда магазин закрытпотому что база данных не содержит никакой информации об аварийных закрытиях, но Sharepoint делает.Таким образом, в get_closed_stores() мы можем вернуть Дата закрытия вместе с номером магазина, чтобы наш Список закрытых магазинов (словарь) выглядел быкак показано ниже:

Список магазинов с датами

{
    [00090, '1/28/19 5:00PM'], 
    [00240,'1/28/19 5:00PM'], 
    [00306, '1/28/19 5:00PM'], 
    [00438,'1/28/19 5:00PM'], 
    [03005,'1/28/19 5:00PM'], 
    [05524, '1/28/19 5:00PM']
}

Теперь, когда даты соответствуют номерам моего магазина, я могу добавить это в свой набор запросов (в идеале) иполучить доступ к нему из моего интерфейса.

Так что annotate() было бы идеально здесь, если бы я работал с чем-то связанным с Django ORM, но что касается "ввода" внешних данных, что именно я ищу?

Я могу просто сделать звонок для каждого магазина из JS на моем внешнем интерфейсе, но я бы предпочел не делать этого, если смогу обойти его

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Вы не видели свой код по всему, но посмотрите, правильно ли вы сшиваете контекст с помощью:

context = {}

books = Books.objects.all ()

context ['books'] = books

0 голосов
/ 29 января 2019

Это уродливое решение, но, тем не менее, решение (я исправлю, как я делаю это в моем фактическом коде).

A QuerySet само по себе не являетсяне было ничего волшебного или особенного, в конце концов это все еще словарь, так что у меня было случайное представление о добавлении в словарь, как обычно, и это работало.

Моя функция теперь возвращает словарь:

{ "store_number": "close_date" }

Мое представление использует этот словарь и использует ключи (номера магазинов) для запроса к базе данных, а затем добавляет дату закрытия магазина как store.close_date, просто сказав:

store.close_date = store_list[store_number]

Скорее всего, это изменится, но я хочу держать его близко к исходному вопросу, чтобы сделать его читаемым для будущих читателей.Ниже мое мнение.

@login_required
def store_closures(request):
    store_list = get_closed_stores()
    store_nums = store_list.keys()
    closed_stores = Store.objects.filter(store_number__in=store_nums)
    for store in closed_stores:
        store.close_date = store_list["{:05d}".format(store.store_number)]
    return render(request, 'all_store_closures.html', {'closed_stores':closed_stores})

Поэтому, если вы хотите добавить не значение Django в набор запросов, вы можете просто использовать стандартный метод добавления словаря.

for obj in query:
    obj.desired_name = 'desired_value'

К которому, конечно, можно получить доступ с помощью {{ object.desired_name }} из вашего шаблона.

...