对不起,这是基本的,但我是新来的
我试图从模板中的url(故事模型的主键)中获取捕获的组,然后使用它来过滤Post数据库中的正确帖子,它有一个(故事)到许多(邮政)关系。我基于文档的代码:https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-display/#dynamic-filtering
但是当我运行它时,我收到错误:
FieldError at /story/1/
Cannot resolve keyword 'name' into field. Choices are: body, id, title, work, work_id
我的代码:
#views
from django.shortcuts import get_object_or_404, render
from django.views.generic import ListView, DetailView
from . models import Post, Story
class StoryListView(ListView):
model = Story
template_name = 'home.html'
class PostListView(ListView):
template_name = 'story_overview.html'
def get_queryset(self):
self.work_id=get_object_or_404(Post, name=self.kwargs['pk'])
return Post.objects.filter(work_id=self.work_id)
#urls
from django.urls import path
from . import views
urlpatterns = [
path('', views.StoryListView.as_view(), name='home'),
path('story/<int:pk>/', views.PostListView.as_view(), name='story_overview'),
]
#templates/home.html
{% extends 'base.html' %}
{% block content %}
{% for post in object_list %}
<h2><a href="{% url 'story_overview' post.pk %}">{{ post.title }}</a></h2>
<p>{{ post.description }}</p>
{% endfor %}
{% endblock content %}
#models
from django.db import models
class Story(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=1500, default= "Description")
def __str__(self):
return self.title
class Post(models.Model):
title = models.CharField(max_length=200, default= "Title")
work = models.ForeignKey(Story,on_delete=models.CASCADE,)
body = models.TextField()
def __str__(self):
return self.title
答案 0 :(得分:0)
您正在尝试使用名称字段从Post()模型获取对象。您的Post()模型中是否存在名称字段?
而不是这样做
self.work_id=get_object_or_404(Post, name=self.kwargs['pk'])
这样做
self.work_id=get_object_or_404(Post, id=self.kwargs['pk'])
希望它有所帮助!
答案 1 :(得分:0)
如果使用work_id
进行过滤,则应使用整数。
def get_queryset(self):
return Post.objects.filter(work_id=self.kwargs['pk'])
如果您想要抓取Story
个实例,那么您应该使用get_object_or_404
来呼叫Story
,并过滤pk
字段而不是name
:< / p>
def get_queryset(self):
self.work=get_object_or_404(Story, pk=self.kwargs['pk'])
return Post.objects.filter(work=self.work)
注意我已将work_id
重命名为work
,因为它是模型实例,而不是ID。