[英]django CreateView doesn't show on ListView until rerun the server
我正在尝试使用CreateView创建对象
class PlayerCreate(CreateView):
template_name = 'form.html'
model = Player
form_class = PlayerForm
header = "Player"
def get_context_data(self):
context = super(PlayerCreate, self).get_context_data()
context['header'] = self.header
return context
def form_valid(self, form):
valid = super(PlayerCreate, self).form_valid(form)
if not self.request.user.is_staff or not self.request.user.is_superuser:
return HttpResponse("Only authorized user can edit or create")
return valid
有用。 但是,当我跳到ListView部分时,我需要重新运行
python manage.py runserver
使新项目显示在列表中。
我想使其工作而无需重新运行服务器。 谢谢!
下面是我的ListView代码
class PlayerList(ListView):
template_name = "list.html"
header = 'Player'
queryset = Player.objects.all().order_by("-timestamp")
def get_context_data(self):
context = super(PlayerList, self).get_context_data()
context['header'] = self.header
return context
def get_queryset(self):
query = self.request.GET.get("q")
if query:
self.queryset = self.queryset.filter(
Q(name__icontains=query)
).distinct()
return self.queryset
else:
return self.queryset
在这种情况下,您应该仅在ListView
使用get_queryset()
而不是queryset
。 queryset
仅在服务器第一次启动时运行,而get_queryset()每次发出请求时都会运行,这就是为什么在重新运行python manage.py runserver
时仅在ListView中看到新元素的原因。
替代解决方案可以是:
def get_context_data(self):
context = super(PlayerList, self).get_context_data()
context['header'] = self.header
context['players_list'] = Player.objects.all().order_by("-timestamp")
return context
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.