【问题标题】:Django - Using get_readonly_fields but getting 'NoneType' object is not iterable' when adding new recordDjango - 添加新记录时使用 get_readonly_fields 但获取“NoneType”对象不可迭代
【发布时间】:2020-10-06 00:40:47
【问题描述】:

事情就是这样,如果 X 字段(非必需)有一个值,那么其他字段都不能被编辑(编辑时)。但是,如果此值为空,则所有其他字段应恢复正常。我在应用程序的 admin.py 中使用它来做到这一点

def get_readonly_fields(self, request, obj=None):
    
    if obj:
        lb = obj.X
        if lb:
            return ['v','p','e']
        else:
            return []

这在您输入现有对象时有效,但是在添加新实例时,我会收到带有“NoneType”对象不可迭代”错误的黄页。我知道这是因为 OBJ 为空,在查找类似问题时,我发现这是一个带有只读字段的 django 错误,显然。搜索了解决方案,但它们使创建的对象无法再编辑(至少是我找到的那些)。

我可以使用解决方法或其他方法吗? 谢谢。

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

    在您的情况下,如果没有 obj,则 get_readonly_fields(...) 方法返回 None。所以,改变你的方法,

    def get_readonly_fields(self, request, obj=None):
        if obj and obj.X:
            return ['v', 'p', 'e']
        return super().get_readonly_fields(request, obj)

    【讨论】:

    • 它成功了,看起来最后的回报是我所缺少的,谢谢!
    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 2023-03-10
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2016-02-08
    • 2020-05-06
    相关资源
    最近更新 更多