Python 当我在Django Admin中删除或添加对象时,它不会删除或添加到网页上吗?
我尝试创建一个简单的应用程序,它有一个类别列表,每个类别都有一个帖子列表 当我在Django Admin中删除一个Category对象时,它在Admin中消失,但仍在模板中呈现。这里是管理员只显示两个类别 但是,在home.html上显示3。。 为导航栏提供服务的base.html也显示了3 我已清除缓存并硬重新加载。 这是我的密码: Views.pyPython 当我在Django Admin中删除或添加对象时,它不会删除或添加到网页上吗?,python,django,django-views,Python,Django,Django Views,我尝试创建一个简单的应用程序,它有一个类别列表,每个类别都有一个帖子列表 当我在Django Admin中删除一个Category对象时,它在Admin中消失,但仍在模板中呈现。这里是管理员只显示两个类别 但是,在home.html上显示3。。 为导航栏提供服务的base.html也显示了3 我已清除缓存并硬重新加载。 这是我的密码: Views.py from django.shortcuts import render, get_object_or_404 from .models i
from django.shortcuts import render, get_object_or_404
from .models import Post, Category
from django.views.generic import ListView, DetailView
category_list = Category.objects.all()
def privacy(request):
return render (request, 'privacy.html', {'category_list':category_list})
def home(request):
return render(request,'home.html',{'category_list':category_list})
def categoryDetail(request, slug):
category = get_object_or_404(Category, slug=slug)
post = Post.objects.filter(category=category)
return render(request,'category_detail.html',{'category':category, 'post':post, 'category_list':category_list})
和模板home.html
{% if category_list %}
<!-- Content Row -->
<div class="row">
{% for cat in category_list %}
<div class="col-md-4 mb-5">
<div class="card h-100">
<div class="card-body">
<h2 class="card-title"><a href="{% url 'category_detail' cat.slug %}">{{ cat.name }}</a></h2>
<p class="card-text">{{ cat.summary|truncatechars:100 }}</p>
</div>
<div class="card-footer">
<a href="{% url 'category_detail' cat.slug %}" class="btn btn-primary btn-sm">More Info</a>
</div>
</div>
</div>
{% endfor %}
</div>
<!-- /.row -->
{% else %}
<h3>COMING SOON ...</h3>
{% endif %}
我跟随YouTube视频在Views.py中创建这些函数,因为我希望能够在同一页面上显示类别的详细信息和其中的帖子列表。。。我有一种可怕的感觉,我的错误是由于在函数之外定义了category_list…或者更糟
另外,我是否需要在base.html中编写一个函数来动态更新菜单选项?这不是您的问题,您不需要添加自定义函数来自行重新加载所有内容。事实上,Django的批量删除方法实际上并没有调用
delete()
方法
这仅适用于通过管理网站删除的情况;如果在自定义模板中发生这种情况,则会发生其他情况。但你在这里很好
:
出于效率原因,“删除选定对象”操作使用QuerySet.delete(),这有一个重要的警告:不会调用模型的delete()方法。如果您希望覆盖此行为,只需编写一个自定义操作,以您首选的方式完成删除操作,例如,为每个选定项调用Model.delete() 因此,请将此添加到您的管理员:
class CategoryAdmin(admin.ModelAdmin):
actions=[“真的删除所选内容”]
def get_操作(自我、请求):
actions=super(CategoryAdmin,self).获取\u操作(请求)
删除操作['delete_selected']
返回操作
def really_delete_selected(self、request、queryset):
对于queryset中的obj:
obj.delete()
如果queryset.count()==1:
message_bit=“1类别条目被删除”
其他:
message_bit=“%s类别条目为”%queryset.count()
self.message\u用户(请求,“%s”已成功删除。“%message\u位)
确实删除所选内容。short\u description=“删除所选内容”
管理站点注册(条目,分类管理)
更新
再次查看代码后,我发现了另一个漏洞
category\u list=category.objects.all()
def home(请求):
返回呈现(请求,'home.html',{'category_list':category_list})
必须将category_list用作局部变量,即在home函数中。如果您在全局(外部)声明它,它将不会响应更改,因为每次运行它只刷新一次。说清楚一点,它会的
def home(请求):
category\u list=category.objects.all()
返回呈现(请求,'home.html',{'category_list':category_list})
如果可以,请随意删除对管理仪表板所做的更改。在某些情况下,删除似乎是一个实际问题。我将您的代码添加到管理员,将Admin.site.register(Entry,CategoryAdmin)中的“Entry”更改为“Category”…删除位起作用…但现在当我添加一个新类别时,它将不会呈现!!管理仪表板还是一般情况?当我登录到管理并添加一个类别时,它在管理仪表板中可见,但不会出现在网页上。Hanks这么多,我现在明白了这一点,并且它按预期工作。我的挫折是必须在每个函数中写入“category_list=category.objects.all()”,否则base.html将不会在每个网页的导航栏中显示类别。这是下一个要解决的问题!
<ul class="navbar-nav ml-auto">
{% for cat in category_list %}
<li class="nav-item">
<a class="nav-link" href="{% url 'category_detail' cat.slug %}">| {{cat.name}}</a>
</li>
{% endfor %}
</ul>
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=255)
summary = models.TextField()
slug = models.SlugField(max_length=255, unique=True)
def __str__(self):
return self.name
class Post(models.Model):
title= models.CharField(max_length=255)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
def __str__(self):
return self.title