我有RoastManifest视图,该视图查询date_scheduled(来自RoastManifest模型的字段)并返回不同的值。我将该查询集传递给模板,然后遍历值并将它们显示为HTML文件上的按钮。我可以单击任何按钮并将相应的日期传递到URL中,(当我单击2019年6月20日按钮时((localhost / schedule / 2019-06-20)),从而将我重定向到RoastManifestDetailView。现在,我希望能够仅基于传递给URL的日期(或单击哪个日期按钮)来过滤RoastManifestDetailView。
我尝试RoastManifest.obejects.filter(date_scheduled__date=date.today())
只是为了看看我今天是否可以返回任何时间表,但我一直遇到Fielderrors(DateField的不受支持的查询“ date”或不允许加入该字段。)。请注意,我知道这不是我的确切查询集。我希望将变量传递到查询集中。
这是模型: (注意:其中的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
答案 0 :(得分:0)
通过上面的模型,我相信正确的查询将是:RoastManifest.obejects.filter(date_scheduled=date.today())
...您的查询正在date
字段上寻找名为scheduled_date
的字段,但是有一个没有这样的财产。
当您准备根据单击的按钮进行查询时,有几种方法可以执行此操作,但是最简单的方法(也是“ correct-ish-est”方法)是将日期作为查询参数传递给URL: <button href="<URL to route>?date={item.scheduled_date}" ...>
或类似的东西(您可能需要在设置中使用日期格式,但是您需要像2019-06-21
这样的东西),并且在您看来,您可以使用来获取该参数的值:date = request.GET.get('date', None)
将返回日期查询参数的字符串值,然后您可以将其用于查询和其他操作(可能还要进行一些转换),如果没有使用该名称的参数,则返回None
。>