Django的初学者,在过去的几天里,我一直在断断续续地尝试解决这个问题,并尝试阅读文档和在谷歌上搜索解决方案,但都无济于事。
我的django项目有两个应用程序-博客和天气,每个都有一个模型。
blog.models
import datetime
from django.db import models
class BlogEntry(models.Model):
date = models.DateField('Date')
blog_name = models.CharField('Name',max_length = 255, null=True)
weather.models
import datetime
from django.db import models
class WeatherEntry(models.Model):
date = models.DateField('Date')
weather = models.CharField('Weather',max_length = 255, null=True)
天气应用程序应该每天填写一次,但博客应用程序只能偶尔填写。现在,我想为我的BlogEntry模型生成一个DetailView,它还将显示博客创建当天的天气。我的计划是覆盖get_context_data()
,但我无法根据日期筛选天气查询集。
在视图中
import datetime
from django.views.generic.detail import DetailView
from blog.models import BlogEntry
from weather.models import WeatherEntry
class BlogDetailView(DetailView):
model = BlogEntry
template_name = 'Blog/blog_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['weather'] = WeatherEntry.objects.filter(date__=date)
return context
我会得到错误NameError: name 'date' is not defined
。我也使用过F表达式,它们也不起作用:(
错误很明显。您没有定义日期变量。这是因为没有定义日期变量或将其传递给get_context_data
方法。首先,您必须确保日期变量已定义或已传递给get_context_data
方法。第二,修正你的压痕方法。python中的缩进很重要。它应该像这个
class BlogDetailView(DetailView):
model = BlogEntry
template_name = 'Blog/blog_detail.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
context['weather'] = WeatherEntry.objects.filter(date=self.object.date)
return context