bug django+easyui 关联表

1、创建用户,用户中包含部门,报错:Author.department 必须是Department 的实例

ValueError at /addAuthor Cannot assign "'1'": "Author.department" must be a "Department" instance.

 

解决办法:

①修改models.ForeignKey()on_delete属性设置

添加了on_delete属性,表明加了外键,会有关联关系。

注意:django 2.0之后的版本都必须设置on_delete

当一个model对象的ForeignKey关联的对象被删除时,默认情况下此对象也会一起被级联删除的。

CASCADE:    默认值,model对象会和ForeignKey关联对象一起被删除

SET_NULL:   将model对象的ForeignKey字段设为null。当然需要将null设为True。

SET_DEFAULT:将model对象的ForeignKey字段设为默认值。

Protect:    删除ForeignKey关联对象时会生成一个ProtectedError,这样ForeignKey关联对象就不会被删除了。

SET():      将model对象的ForeignKey字段设为传递给SET()的值。

DO_NOTHING: 啥也不做。

②修改 接口获取外键值,因为用户部门信息级联 部门表,所以需要此关联设置

 

 

2、获取author页面表格数据

TypeError: Object of type 'datetime' is not JSON serializable

def getAuthor(request):

    if request.method == "GET":

        list = models.Author.objects.all()

        print (list)

        authorList = []

        for li in list:

            authorList.append({

                "id": li.id,

                "name": li.name,

                "sex": li.sex,

                "department": li.department,

                "pthone": li.pthone,

                "publish_date": li.publish_date,

            })



        # 将int类型使用dumps()方法转为str类型

        author_len = json.dumps(len(authorList))

        # 构造一个字典

        json_data_list = {

            'ret': {

                'success': True,

                'retCode': 200,

                'retMsg': "查询成功!"

            },

            'rows': authorList,

            'total': author_len

        }

        return HttpResponse(json.dumps(json_data_list), content_type='application/json; charset=utf-8')

解决办法:重写时间处理方法,设置默认的datatime

# -*-  coding:utf-8 -*-

import json

import datetime



# python自带的json,将数据转换为json数据时,datetime格式的数据报错. 所以重写构造json类,遇到日期特殊处理

class DateEncoder(json.JSONEncoder):

    def default(self, obj):

        # if isinstance(obj, datetime.datetime):

        #     return int(mktime(obj.timetuple()))

        if isinstance(obj, datetime.datetime):

            return obj.strftime('%Y-%m-%d %H:%M:%S')

        elif isinstance(obj, date):

            return obj.strftime('%Y-%m-%d')

        else:

            return json.JSONEncoder.default(self, obj)



from proApp.common import DateEncoder    #这里from 引入的全局,不然会报错找不到common模块

json.dumps(li.publish_date, cls=DateEncoder)

返回数据还有点小问题:时间数据 多一层双引号

 

解决办法:相关链接:https://www.cnblogs.com/xiaomingzaixian/p/7286793.html

json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)

(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码 === json.dumps() 字典转化为字符串

(2)json.loads()函数是将json格式数据转换为字典   === json.loads() 字符串转化为字典

因为json.dumps()处理过得数据是字符串格式,所以后面return 再返回前端数据时进行json.dumps()转化会在多一层引号

所以: 这里在获取到日期的地方使用json.loads()将json.dumps()数据再格式化一下即可

 

3、修改author页面表格数据

TypeError: int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值