我正在为新闻创建分类。我正在尝试过滤新闻类别,但得到一个值错误models.py
class category(models.Model):
title = models.CharField(max_length=199)
category_image = models.ImageField(upload_to="imgs")
def __str__(self):
return self.title
class newsmodel_0(models.Model):
category = models.ForeignKey(category, on_delete=models.CASCADE)
title = models.CharField(max_length=49, null=False, blank=False)
date_published = models.DateTimeField(auto_now_add=True)
# details = models.TextField()
details = RichTextUploadingField(blank=True, null=True)
slug = models.SlugField(blank=True, unique=True)
def slug(self):
return slugify(self.date_published)这是views.py
def index(request):
cats = category.objects.all()
return render(request, 'newspaperapp/index.html', {'cats': cats})
class nowlist(ListView):
model = newsmodel_1
template_name = 'newspaperapp/index.html'
class newslist(DetailView):
model = newsmodel_1
template_name = 'newspaperapp/home.html'
context_object_name = 'newspaperapp'
class SearchView(ListView):
model = newsmodel_1
template_name = 'newspaperapp/search.html'
context_object_name = 'all_search_results'
def get_queryset(self):
result = super(SearchView, self).get_queryset()
query = self.request.GET.get('search')
# query is of type 'str', convert to datetime
start_day = datetime.fromisoformat(query)
end_day = start_day + timedelta(days=1)
if query:
postresult = newsmodel_1.objects.filter(
date_published__gte=start_day,
date_published__lt=end_day
)
result = postresult
else:
result = None
return result
def full_news(request):
return render(request, 'newspaperapp/full-news.html')
def CategoryView(request, cats):
category_posts = newsmodel_1.objects.filter(category=cats)
return render(request, "newspaperapp/categories.html", {'cats': cats, 'category_posts': category_posts})这是urls.py
urlpatterns = [
path('',views.index,name='index'),
path('date/',nowlist.as_view(),name = "date"),
path('<int:pk>',newslist.as_view(),name = "home"),
path('results/', SearchView.as_view(), name='search'),
path('full_news/',views.full_news,name = "full_news"),
path('category/<str:cats>/',views.CategoryView,name='category'),
]categories.html
<h1>{{cats}} category</h1>
<ul>
{%for post in category_posts%}
<h3><a href="{%url 'newspaperapp:index' %}">{{ newspaperapp.title}}
{{newspaperapp.category}}</a></h3>
{% endfor %}index.html
{% for cat in cats %}
<p class="card-text"><a href="category/{{cat.id}}" class="btn btn-sm btn-primary">{{cat.title}}
</a></p>
{% endfor %}如果我使用#category_posts = newsmodel_1.objects.filter(category__name = cats),那么我会在/newspaperapp/category/sports/ Related Field got lookup: FieldError中得到一个错误
我已经更改了catogories.html中的代码,但它并没有显示体育新闻,而只是打印“体育类别”。
发布于 2021-01-30 14:56:31
在您的CategoryView中,而不是使用以下内容:
def CategoryView(request, cats):
category_posts = newsmodel_1.objects.filter(category=cats)
return render(request, "newspaperapp/categories.html", {'cats': cats, 'category_posts': category_posts})试试这个:
def CategoryView(request, cats):
cats = Category.objects.get(title=cats) # this will give the Category instance instead of string cats
category_posts = newsmodel_1.objects.filter(category=cats)
return render(request, "newspaperapp/categories.html", {'cats': cats, 'category_posts': category_posts})我希望这对你有用。
https://stackoverflow.com/questions/65965328
复制相似问题