可空外键字段Django Rest框架的反序列化问题

时间:2019-06-17 10:49:56

标签: django python-3.x django-rest-framework

可为空的外键字段反序列化时。得到错误:

  

“ NoneType”对象没有属性“ foreign_field”

直到Django-Rest-Framework版本才出现此问题: 3.6.4

找到了问题的原因(已删除无检查,并且 ObjectDoesNotExist检查不处理无实例):Link

  

为什么取消此支票?

是否有任何可解决可空外键字段的解决方法?

尝试了以下操作

  • 尝试设置默认值:无效
  • 编写序列化程序方法不可行(现有代码中的许多更改)。

编辑:

模型结构:

return true

序列化器:

<script type="text/javascript" src="/SiteAssets/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="/SiteAssets/jquery-3.4.1.js"></script>
<script type="text/javascript">

function PreSaveAction() {
    drop1 = $("select[title='Supervisor Completed']").val();
    date1 = $("input[title='Supervisor Date Completed']").val();
    drop2 = $("select[title='IMO Completed']").val();
    date2 = $("input[title='IMO Date Completed']").val();
    drop3 = $("select[title='IAM Completed']").val();
    date3 = $("input[title='IAM Date Completed']").val();

    if (drop1 !=="Select One..." && date1===""){
        alert("The Supervisor Date Completed is a required element. Please Fill this date out.");
        return false;
    }    

    if (drop2 !=="Select One..." && date2===""){
        alert("The IMO Date Completed is a required element. Please Fill this date out.");
        return false;
    }    

    if (drop3 !=="Select One..." && date3===""){
        alert("The IAM Date Completed is a required element. Please Fill this date out.");
        return false;
    }    

    return true;
}

1 个答案:

答案 0 :(得分:1)

找到了解决方案:

class Demo1(ModelSerializer):
 demo = CharField(source='demo.name', allow_null=True)
 class Meta:
     model=models.Demo1
     fields = ('id', 'demo')

allow_null 放入序列化器后,它就起作用了!但不明白,这有什么意义?如果我们已经在模型中添加了 null = True