Python DetailView显示布尔属性设置为True的模型
我正在创建一个Django web应用程序,并试图将页面模型设置为主页(根目录下的页面) 只能有一个主页模型,通过将Python DetailView显示布尔属性设置为True的模型,python,django,detailview,class-based-views,website-homepage,Python,Django,Detailview,Class Based Views,Website Homepage,我正在创建一个Django web应用程序,并试图将页面模型设置为主页(根目录下的页面) 只能有一个主页模型,通过将homepage变量设置为true来设置主页。如果设置为true,则会将上一个主页设置为false # models.py class Page(models.Model): title = models.CharField(max_length=255) author = models.ForeignKey(User, on_delete=models.CASCA
homepage
变量设置为true来设置主页。如果设置为true,则会将上一个主页设置为false
# models.py
class Page(models.Model):
title = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField()
homepage = models.BooleanField(default=False)
def save(self, *args, **kwargs):
if not self.homepage:
return super(Page, self).save(*args, **kwargs)
with transaction.atomic():
Page.objects.filter(
homepage=True).update(homepage=False)
return super(Page, self).save(*args, **kwargs)
def __str__(self):
# return self.title + ' | ' + str(self.author)
return self.title
在myviews.py脚本中,我试图获取具有homepage=True
的模型,并将其显示为详细视图
# urls.py
urlpatterns = [
...
path('', HomePage.as_view(), name="home"),
...
]
我做错了什么?如何解决这个问题?我认为错误在这里:
# views.py
class HomePage(DetailView):
model = Page.objects.filter(homepage=True)
template_name = 'home.html'
在model字段中,您必须传递一个模型,如果您想通过传递一个过滤的queryset来更改上下文数据,您必须通过
我已经按照您的建议修改了HomePage类,现在我遇到了一个不同的错误:
必须使用URLconf中的对象pk或slug调用Generic detail view HomePage。
。如何修复此问题?我将get\u queryset(self)
更改为get\u object(self)
。现在显示page.html页面,但是没有显示{{page.body}
,只有h1标记被呈现到屏幕上,而不是使用TemplateView尝试更新视图。使用get_queryset(self)
方法并使用TemplateView
显示home.html页面,但未呈现{{home.body}
,在pk或urlconf方面没有任何要求,如何修复此问题?除非更改TemplateView中的context_object_name字段,否则将使用{{object.body}呈现该字段。如果要保持{{home.body}},请在视图中写入:context_object_name=“home”
<!-- home.html -->
<h1>Home</h1>
{{ page.body }}
AttributeError at /
'QuerySet' object has no attribute '_default_manager'
# views.py
class HomePage(DetailView):
model = Page.objects.filter(homepage=True)
template_name = 'home.html'
# views.py
class HomePage(DetailView):
model = Page
template_name = 'home.html'
def get_queryset(self):
return Page.objects.filter(homepage=True)