Django的博客文章引用以及做毕设遇到的问题
1.外键的主表、子表如何取出对方数据(主表取子表,子表取主表),related_name是关联对象反向引用描述符
反向查询:.另一个表小写_set.all() 或者related_name替换_set,或者related_query_name替换表名小写 (这两个要在模型中定义)
一对一
正向查询:副表.objects.条件.约束名(OneToOne中的名字).主表字段名
反向查询:主表.objects.条件.副表名(小写).副表字段名
主表、副表的选择:当两张一对一关联的表必须要删除其中一个时,需要留下的就是主表,被删除的就是副表,约束写在副表中
2.在模板语言制作的表格中,某个字段太长自动截断并加上省略号...,网上的办法比较麻烦且不好用,我采取的是利用title属性和模板的if语句
<td title={{obj.detail}}>
{% if obj.detail|length > 16 %}
{{obj.detail|truncatechars:16}}...
{% else %}
{{obj.detail}}
{% endif %}
</td>
3.想要ModelForm的某个字段不显示在前端的循环的模板语句中,而是在视图函数中处理:不能sava,因为ModelForm字段和Model字段不对应;不能手动将排除的字段加回去,无法save
解决方法:初始化实例化模型中缺省但又必填的字段、或者使用 save(commit=False) 然后手动设置其他必填字段[¶](https://docs.djangoproject.com/zh- hans/3.2/topics/forms/modelforms/#selecting-the-fields-to-use)
4.disabled属性传回来的是空值,modelform缺值无法save,因此可以使用readonly,但是只有input等有效,select等就无效,依然能改值,更好的办法:
首先加载时先把他们设为disabled
$("#id_name").attr("disabled",true);
当点击提交的时候,在按钮的js点击事件中把disabled属性移除就可以了
$("#id_name").removeAttr("disabled");
但是无论哪个,在网页源代码中修改值,再保存,依然能在数据库中改变值。所以需要在其他方面进行检测是否修改了值。
5.在视图函数处理搜索框字典时,需要将每个查到的queryset object对象反向查询并拼接在一个queryset对象中。
首先要使用object的none方法让它成为可以拼接的查询集,然后for循环对查到的queryset外键反向查询并将到查到的object拼接到queryset中
循环拼接queryset
6.点击按钮清空搜索框的数据:如果是$("input[name='q']").attr("value",""),只能在搜索框提交数据后才能点击刷新,输入内容但不提交时无法刷新
改进:$("input[name='q']").val("");
7.fields, object, queryset什么关系???
8.bootstrap-datetimepicker时间插件的使用,可以在模板标签中简单的使用,也可以在js中进行详细设置
9.页面使用模板语言{{field}}进行输出,要修改某个特定的标签,可以用js对他进行修改。模板创建标签时自动给其加上id='id_字段名',js获取标签并进行相应操作就行。
10.使用bootstrap-datetimepicker插件,文件要导入的路径要写正确,js语法要正确。要设置中文版则一共要导入两个js文件。
特别注意:如果前端显示的时间和数据库的相差8h,去settings.py把 USE_TZ = True 改为False,具体原因
11.前台报错:http://127.0.0.1:8000/admin/riskarea/?uid=3 500 (Internal Server Error) 标红,后台报错:django xxx is not JSON serializable,错误原因:
row_object = models.RiskArea.objects.filter(id=uid).first()
row_dict = models.RiskArea.objects.filter(id=uid).values("city","county","detail","pub_date","risk_level").first()
要搞清楚,没加 values 的话的得到的是 object,加了 values 取到了值才是 dict,而我要返回的是字典,不然就会报错
result = {
"status":True,
"data":row_dict
}
return JsonResponse(result)
12.django通过模型的外键进行排序:queryset = models.Route.objects.all().order_by("student__login__username")
student__login 表示Route模型通过外键student找到父表StudentInfo表的属性login
student__login__username 表示Route模型通过父表StudentInfo的外键login找到父表的父表LoginInfo的属性username
13.django crontab添加定时任务,只能在linux下运行。windows下用django-apschedule。
https://www.csdn.net/tags/MtTaAgwsMDY3ODA3LWJsb2cO0O0O.html , https://blog.csdn.net/s_frozen/article/details/123279571 ,
https://cloud.tencent.com/developer/article/1585026
一些很杂的小错误:
1.',' expected.javascript:看看js代码中函数名后面的()是不是不全,不应该是({... function要有完整的括号,然后才是{}
2.新增和编辑用的同一个模态框,即使加上readonly时间也能改,所以编辑时remove掉,新增时再加进去
function showDate(){
$('#id_pub_date').datetimepicker({
minView: "month", //选择日期后,不会再跳转去选择时分秒
format: 'yyyy-mm-dd', // 选择日期后,文本框显示的日期格式
autoclose: true, // 选择日期后自动关闭
language: 'zh-CN', // 汉化
});
$('#id_pub_date').datetimepicker("remove");
当网页有form且修改了时候,刷新网页会重新提交表单
location.reload();
可以设为网页重定向
location.replace("/subadmin/personal/");
4.在使用选择标签时,需要注意choices的选项可以配置从数据库中获取,但是由于是静态字段,获取的值对应的文字无法实时更新 ,需要重写构造方法从而实现choice实时更新。
5.django Page not found (404),网页url错误,报错很干净没有任何提示:该路径不可用,比如127.0.0.1:8000/static/... ,admin/也是特殊的,不要自定义占用
6. 127.0.0.1 将您重定向的次数过多:重定向无限循环了,看下是不是重复重定向了。比如:login函数里面有redirect(/home/),而中间件里也有个redirect(/home/)
7.filter获得的是QuerySet,get()获得的是单个object
。