【发布时间】:2019-01-11 13:14:54
【问题描述】:
我想在站点页面“帖子列表”(模板“post_list.html”)上为管理员(员工)显示一个“适度”存在的新帖子,例如“scrin1”(帖子 1 -已发布;帖子 2 - “关于适度”)。普通用户只能看到已发布帖子的“帖子列表”,请参阅“scrin2”。这样可以确保每个管理员没有进入站点的管理面板,但可以从站点页面“发布更新”(模板“post_form.html”)发布此帖子,例如“scrin3”。 我尝试在views.py 中使用staff_member_required(PostListView 中的form_valid),但没有成功。 如果帖子被编辑,也必须在发布编辑版本之前进行审核。
以下代码显示了管理面板中帖子审核的实现。我只是不知道如何从站点页面(无需登录管理面板,例如,从站点页面“... / post / / update”)对帖子(创建或更新)进行审核,只是通过勾选“审核”中的复选框)
models.py
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
body = models.TextField()
moderation = models.BooleanField(default=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
forms.py
from .models import Post
class PostForm(forms.ModelForm):
title = forms.CharField(required=True)
body = forms.CharField(widget=forms.Textarea)
class Meta:
model = Post
fields = ['title', 'body']
views.py
from .forms import PostForm
class PostListView(generic.ListView):
model = Post
paginate_by = 10
def get_queryset(self):
queryset = super(PostListView, self).get_queryset()
return queryset.filter(moderation=True)
class PostCreateView(FormView):
form_class = PostForm
template_name = 'blog/post_form.html'
success_url = reverse_lazy('posts')
def form_valid(self, form):
response = super(PostCreateView, self).form_valid(form)
form.instance.user = self.request.user
form.save()
return response
class PostUpdateView(PermissionRequiredMixin, UpdateView):
model = Post
fields = ['title', 'body']
permission_required = 'blog.can_mark_returned'
admin.py
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'user', 'moderation')
admin.site.register(Post, PostAdmin)
urls.py
urlpatterns = [
url(r'^posts/$', views.PostListView.as_view(), name='posts'),
url(r'^post/(?P<pk>\d+)$', views.PostDetailView.as_view(), name='post-detail'),
url(r'^post/create/$', views.PostCreateView.as_view(), name='post_create'),
url(r'^post/(?P<pk>\d+)/update/$', views.PostUpdateView.as_view(), name='post_update'),
]
post_list.html
{% extends "base_generic.html" %}
{% block title %}<title>Posts list</title>{% endblock %}
{% block content %}
<h1>All posts</h1>
{% if post_list %}
<ul>
{% for post in post_list %}
<li><a href="{{ post.get_absolute_url }}">{{ post.title }}</a> {{ post.user }}</li>
{% endfor %}
</ul>
{% else %}
<p>There are no posts.</p>
{% endif %}
{% endblock %}
post_form.html
{% extends "base_generic.html" %}
{% block content %}
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
{% endblock %}
Screen1以“管理员”身份查看页面“帖子列表”
Screen2以“普通用户”身份查看页面“帖子列表”
Screen3以“管理员”身份查看“发布更新”页面,并带有“审核”复选框
【问题讨论】:
-
你能比“它不起作用”更具体吗?什么不起作用?有错误吗?是否显示了不应该显示的内容?很高兴您展示了所有代码,并解释了您希望看到的行为,但您需要更好地描述实际问题。例如“当不是管理员的用户执行 X 时,会发生 Y,但应该是 Z。”或“当管理员用户点击 X 时显示此错误 Y”
-
没有错误。我只想确定管理员可以直接在网站上审核条目 - 无需登录管理面板。
-
好的,但究竟是什么不起作用?
-
代码没有错误。该代码显示了管理面板中帖子审核的实现。我只是不知道如何从网站页面(无需登录管理面板,例如,从网站页面“.../post/
/update ”,只需勾选“审核”中的复选框)