django useful tip

本文分享了作者使用Django过程中的经验总结,包括如何正确配置时区以适应中国时间,以及解决使用ManyToMany字段时出现的TypeError异常的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在用django做一下项目, 我也是第一次使用django, 也是第一次比较正式的使用Python. 本文将记录一下使用django过程中遇到的一下问题和解决办法. 并且不断更新!

setting设置


几天发现部署以后显示的时间不多, 是因为时区设置到问题

对于我们中国:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->TIME_ZONE = 'Asia/Shanghai'

LANGUAGE_CODE 
= 'zh-cn'


ManyToMany的bug
如果你在使用many-to-many去取数据的时候发生如下异常:

TypeError: filter() keywords must be strings

这个是有django的bug引起的:

修复方法:
django\db\models\fields\related.py 349行

        def __init__(self, model=None, core_filters=None, instance=None, symmetrical=None,
                join_table
=None, source_col_name=None, target_col_name=None):
            super(ManyRelatedManager, self).
__init__()
            self.core_filters 
= core_filters
            self.model 
= model
            self.symmetrical 
= symmetrical
            self.instance 
= instance
            self.join_table 
= join_table
            self.source_col_name 
= source_col_name
            self.target_col_name 
= target_col_name
            self._pk_val 
= self.instance._get_pk_val()

改成

        def __init__(self, model=None, core_filters=None, instance=None, symmetrical=None,
                join_table
=None, source_col_name=None, target_col_name=None):
            super(ManyRelatedManager, self).
__init__()
            
            
for key, value in core_filters.items(): 
                
if not isinstance(key, str): 
                    
del core_filters[key]  
                    core_filters[smart_str(key)] 
= value
                    
            self.core_filters 
= core_filters
            self.model 
= model
            self.symmetrical 
= symmetrical
            self.instance 
= instance
            self.join_table 
= join_table
            self.source_col_name 
= source_col_name
            self.target_col_name 
= target_col_name
            self._pk_val 
= self.instance._get_pk_val()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值