Django - 添加新记录时使用 get_readonly_fields 但获取 'NoneType' 对象不可迭代

Django - Using get_readonly_fields but getting 'NoneType' object is not iterable' when adding new record

事情是这样的,如果 X 字段(非必填)有值,则可以编辑其他字段的 none(编辑时)。但是,如果此值为空,则所有其他字段应恢复正常。我在应用程序的 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 错误,显然。搜索了解决方案,但它们使得创建的对象无法再被编辑(至少我找到的那些)。

我可以使用变通方法或其他方法吗? 谢谢

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

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