Передача даты в набор запросов на основе нажатия кнопки в Django - PullRequest
0 голосов
/ 21 июня 2019

У меня есть RoastManifest View, который запрашивает date_scheduled (поле из моей модели RoastManifest) и возвращает различные значения. Я передаю этот набор запросов в шаблон, перебираю значения и представляю их в виде кнопок в файле HTML. Я могу нажать любую кнопку и передать соответствующую дату в URL ((localhost / schedule / 2019-06-20), когда я нажимаю кнопку 20 июня 2019 г.), перенаправляя меня к моему RoastManifestDetailView. Теперь я хочу иметь возможность фильтровать мой RoastManifestDetailView только по дате, переданной URL-адресу (или по дате нажатия кнопки).

Я пытался RoastManifest.obejects.filter(date_scheduled__date=date.today()) просто чтобы посмотреть, смогу ли я вернуть что-нибудь на сегодня расписание, но я продолжаю получать Fielderrors (Неподдерживаемый поиск 'date' для DateField или присоединение к полю недопустимо.). Обратите внимание, я знаю, что это не точный набор запросов для меня. Я хочу передать переменную в набор запросов.

Это модель: (ПРИМЕЧАНИЕ: roast_order присутствует только для использования библиотеки adminsortable2)

class RoastManifest(models.Model):
    def batch_number_incrementer():
        current_max = RoastManifest.objects.order_by('-batch_number').first()
        if current_max:
            return current_max.batch_number + 1
        else:
            return 8000000
    batch_number = models.IntegerField(unique=True,
                                       default=batch_number_incrementer,
                                       )
    product = models.ForeignKey(Product, related_name="products",
                                on_delete=models.PROTECT)
    date_scheduled = models.DateField()
    roaster_profile = models.ForeignKey(RoasterProfile,
                                        on_delete=models.PROTECT)
    roast_order = models.PositiveSmallIntegerField(default=0, blank=False, null=False)

    class Meta:
        ordering = ('roast_order',)

Вот как я выбираю запланированные дни:

class RoastManifestListView(ListView):
    model = RoastManifest
    template_name = 'schedule/scheduled_days.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['days'] = RoastManifest.objects.order_by('date_scheduled').values('date_scheduled').distinct()
        return context

Это точка зрения, с которой у меня проблемы:

class RoastManifestDetailView(TemplateView):
    template_name = 'schedule/roastmanifest_list.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["roasts"] = RoastManifest.objects.get(date_scheduled__date=date.today())
        return context

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

С вышеупомянутым RoastManifestDetailView я в настоящее время получаю FieldError

1 Ответ

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

Глядя на модели выше, я считаю, что правильный запрос будет: RoastManifest.obejects.filter(date_scheduled=date.today()) ... Ваш запрос искал поле с именем date в поле scheduled_date, но такого свойства нет.

Когда вы готовы сделать запрос на основе нажатой кнопки, есть несколько способов сделать это, но самый простой (и "правильный-иш-метод") будет передать дату в URL как параметр запроса: <button href="<URL to route>?date={item.scheduled_date}" ...> или что-то в этом роде (вам, вероятно, придется немного поиграть с форматами даты, но вы хотите что-то вроде 2019-06-21), и, по вашему мнению, вы можете получить значение этого параметра, используя: date = request.GET.get('date', None) который будет возвращать строковое значение параметра запроса даты, который вы затем сможете использовать в запросах и прочем (опять же, возможно, после некоторого преобразования) или None, если нет параметра с таким именем.

...