python - MainList 缺少 QuerySet。定义 MainList.model、MainList.queryset 或覆盖 MainList.get_queryset()
问题描述
您好我正在尝试有一个主页,我可以从一个名为 Lecturer 的模型中列出,并从一个名为 DistributionForm 的模型中创建表单。我用 CreateView 尝试过,但我得到错误MainList is missing a QuerySet。定义 MainList.model、MainList.queryset 或覆盖 MainList.get_queryset()。 在查询集丢失的情况下。你能帮我么。
视图.py
class MainList(generic.CreateView):
template_name='home.html'
form=DistributionForm
models=Lecturer
fields=['distribution','semester','lecture','lecturer']
success_url = "/home"
def form_valid(self,form):
form.instance.author=self.request.user
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context ['lecturer_list'] = Lecturer.objects.order_by('lecturer')
return context
网址.py
from django.urls import path
from . import views
from django.conf.urls.static import static
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
app_name='distribution'
urlpatterns=[
path('home/',views.MainList.as_view(),name='home'),
path('hocalar/<slug:slug>/',views.LecturerDistribution.as_view(),name='lecturer_distribution'),
path('dersler/<slug:slug>/',views.LectureDistribution.as_view(),name='lecture_distribution'),
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
和我的 home.html
{% extends "base.html" %}
{%block content%}
{% load crispy_forms_tags %}
<div class="container">
<div class="form-group pull-right">
<input type="text" class="search form-control" placeholder="Ara">
</div>
<span class="counter pull-right"></span>
<table class="table table-hover results">
<thead>
<tr>
<th >Hoca</th>
<th >Ders</th>
</tr>
<tr class="warning no-result">
<td><i class="fa fa-warning"></i> Sonuç Yok</td>
</tr>
</thead>
<tbody>
{%for lec in lecturer_list%}
<tr>
<td>
<p ><a style="text-decoration:none" href="{% url 'distribution:lecturer_distribution' slug=lec.slug%}">{{lec.lecturer}}</a></p>
</td>
<td>
{%for ders in lec.lecture.all%}
<a style="text-decoration:none" href="{% url 'distribution:lecture_distribution' slug=ders.slug%}">{{ders.lecture}}</a>,
{% endfor%}
</td>
</tr>
{%endfor%}
</tbody>
</table>
</div>
<div class="col-md-2 float-right ">
<button style= "position: fixed; top:175px; " type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Add New Distribution</button>
</div>
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">New Distribution</h5>
</div>
<div class="modal-body">
<form method="post" style="margin-top: 1.3em;">
{% csrf_token %}
{{ form|crispy }}
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Submit</button>
<button type="submit" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</form>
</div>
</div>
</div>
</div>
<style >
body{
padding:20px 20px;
}
.results tr[visible='false'],
.no-result{
display:none;
}
.results tr[visible='true']{
display:table-row;
}
.counter{
padding:8px;
color:#ccc;
}
</style>
<script>
$(document).ready(function() {
$(".search").keyup(function () {
var searchTerm = $(".search").val();
var listItem = $('.results tbody').children('tr');
var searchSplit = searchTerm.replace(/ /g, "'):containsi('")
$.extend($.expr[':'], {'containsi': function(elem, i, match, array){
return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
$(".results tbody tr").not(":containsi('" + searchSplit + "')").each(function(e){
$(this).attr('visible','false');
});
$(".results tbody tr:containsi('" + searchSplit + "')").each(function(e){
$(this).attr('visible','true');
});
var jobCount = $('.results tbody tr[visible="true"]').length;
if(jobCount == '0') {$('.no-result').show();}
else {$('.no-result').hide();}
});
});
</script>
{% endblock content%}
编辑
class MainList(generic.CreateView):
template_name='home.html'
model=Distribution
fields=['distribution','semester','lecture','lecturer']
success_url = "/home"
def form_valid(self,form):
form.instance.author=self.request.user
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context ['lecturer_list'] = Lecturer.objects.order_by('lecturer')
return context
解决方案
我认为添加一个类属性(或您queryset = Lecturer.objects.all()
想要MainList
基于Lecturer
模型的任何查询集)或定义get_queryset
如下代码的方法:
class MainList(generic.CreateView):
template_name='home.html'
form=DistributionForm
models=Lecturer
fields=['distribution','semester','lecture','lecturer']
success_url = "/home"
def get_queryset(self):
return Lecturer.objects.all()
def form_valid(self,form):
form.instance.author=self.request.user
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context ['lecturer_list'] = Lecturer.objects.order_by('lecturer')
return context
将解决您的问题。另一种方法是更改models=Lecturer
您model=Lecturer
的类属性(如果您没有在其他地方使用它),并且只有在这种情况下您才不需要为您的类定义查询集。
推荐阅读
- php - 如何在 React Native 中通过上传图像获取数据到 php 服务器
- python-3.x - Python 控制台要求在 PyCharm (Python 3.x) 中导入 sys
- symlink - 删除和重新创建文件时的 Linux 符号链接
- python - 通过从 json 创建新对象来消除嵌套
- android - 包含带有本机组件(`bitcoinj`)的库时,APK无法安装
- javascript - 将 DOM 元素转换为 Javascript (ES6) 模板字符串
- android - React Native Android:仅在连接 React Native Debugger 时获取请求才有效
- postgresql - 将 Postgresql 中的数据直接查询到 Google 电子表格中?
- docker - 使用 AWS 日志记录驱动程序配置运行 docker 容器时,Systemd Unit 引发错误
- javascript - 如何使用 jquery 仅在解析的 xml 上选择父节点