Ser*_*ity 8 python django django-models python-3.x
当我这样做时python manage.py makemigrations,我得到了上述错误,我不确定错误发生在哪里.我看到一些关于这个问题的帖子,但我发现主要是在DateTimeField()函数传递的地方但在我的情况下我使用了auto_now属性而不是一些与datetime相关的函数.
但是,我在类方法中使用了lambda函数,如下所示.
@classmethod
    def get_content_models(cls):
        """
        Return all Package subclasses.
        """
        is_content_model = lambda m: m is not Package and issubclass(m, Package)
def set_helpers(self, context):
    current_package_id = getattr(current_package, "id", None)
    current_parent_id = getattr(current_package, "parent_id", None)
    self.is_current_child = self.parent_id == current_package_id
    self.is_child = self.is_current_child
    def is_c_or_a(package_id):
        parent_id = context.get("_parent_package_ids", {}).get(package_id)
        return self.id == package_id or (parent_id and is_c_or_a(parent_id))
    self.is_current_or_ascendant = lambda: bool(is_c_or_a(current_package_id))
我不清楚这个问题,所以我发布了解原因.以上代码是否创建了该问题?如果是原因,应该做什么呢?
我不知道这个问题究竟在哪里,所以这里是详细介绍models.py of package app因为代码有点大.它没有达到预订模型,所以我只是把包应用程序的代码,在这里
https://gist.github.com/SanskarSans/51d2f287309a97163e680cc38abd3e06
UPDATE
在我的Package模型中,我使用了自定义字段,在该字段中使用了lambda而不是callable函数,这就产生了一个问题.由于模型的长文件,我没有在这里粘贴,我为此道歉.
这就是我所做的
in_menus = MenusField(_("Show in menus"), blank=True, null=True)
class MenusField(MultiChoiceField):
    """
    ``MultiChoiceField`` for specifying which menus a package should
    appear in.
    """
    def __init__(self, *args, **kwargs):
        choices = [t[:2] for t in getattr(settings, "PAGE_MENU_TEMPLATES", [])]
        default = getattr(settings, "PAGE_MENU_TEMPLATES_DEFAULT", None)
        if default is None:
            default = [t[0] for t in choices]
        elif not default:
            default = None
        if isinstance(default, (tuple, list)):
            d = tuple(default)
            # this lambda should be avoided
            # default = lambda:d 
            default = default_value(d)
        defaults = {"max_length": 100, "choices": choices, "default": default}
        defaults.update(kwargs)
        super(MenusField, self).__init__(*args, **defaults)
我假设您正在使用 pickle 模块进行序列化。
您无法对定义的类进行pickle set_helpers。该方法设置self.is_current_or_ascendant为 lambda 函数,并且这些函数位于无法 pickle 的列表中(请参阅https://docs.python.org/3/library/pickle.html中的 12.1.4 )。
类方法不会成为问题,因为它只定义一个局部变量 ,is_content_model该变量会立即超出范围并被删除。事实上,正如您在此处介绍的那样,该方法根本不执行任何操作。
| 归档时间: | 
 | 
| 查看次数: | 391 次 | 
| 最近记录: |