python - 在重新运行服务器之前,django CreateView 不会显示在 ListView 上
问题描述
我正在尝试使用 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
解决方案
在这种情况下,您应该只get_queryset()
在queryset
您的ListView
. queryset
仅在您的服务器第一次启动时运行,而 get_queryset() 每次发出请求时都有效,这就是为什么您在重新运行时仅在 ListView 中看到新元素的原因python manage.py runserver
。
另一种解决方案可能是:
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
推荐阅读
- console-application - 简单的井字游戏
- javascript - Phaser 3 Collider 裁剪
- swift - 与 GCD 同时处理数组项
- python - 熊猫嵌套 groupby 给出了意想不到的结果
- php - 多对多 toArray() 覆盖中的最大堆栈深度超出问题
- networking - 拥塞发生时 TCP 流的速率如何变化
- reverse-geocoding - goecoding api 免费版可以下多少订单?
- python - 错误:MySQL-python 的构建轮子失败
- python-3.x - for 循环内的东西不起作用
- selenium-webdriver - 尝试并行运行两个测试时,URL 仅针对一个测试启动