首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python从一个函数调用另一个函数

python从一个函数调用另一个函数
EN

Stack Overflow用户
提问于 2019-02-20 15:48:39
回答 2查看 80关注 0票数 0

我正在使用python django DRF .Im创建一个序列化程序,创建一个单独的助手类,并尝试覆盖create方法。

我的助手类:

代码语言:javascript
复制
class WorkFlowHelper:

    def assign_level_permissions(self,workflow_level,level):
        for permission in level['permissions']:
            workflow_permission_obj = WorkflowPermission.objects.get(short_name=permission['short_name'])
            workflow_level.permissions.add(workflow_permission_obj)

    def create_levels(self,workflow,levels):
        for level in levels:
            workflow_level = WorkflowLevel()
            workflow_level.workflow=workflow,
            workflow_level.level = level['level']
            workflow_level.operation=level['operation'] 
            workflow_level.save()
            workflow.levels.add(workflow_level)
            self.assign_level_permissions(workflow_level,level)

    def create_categories(self,workflow, categories):
       for category in categories:
           workflow_category_obj = WorkflowCategory.objects.get(short_name=category['short_name'])
           workflow.categories.add(workflow_category_obj)

    def create(self,name, description,tenant, levels, categories):
        workflow = Workflow.objects.create(name=name, description=description, tenant=tenant)
        self.create_levels(workflow,levels)
        self.create_categories(workflow,categories)
        workflow.save()

        return workflow

在序列化程序中,我必须调用create方法,如下所示:

代码语言:javascript
复制
def create(self, validated_data):
    name=validated_data['name']
    description=validated_data.get('description'),
    tenant=self.context['request'].user.tenant
    levels = self.initial_data['levels']
    categories = self.initial_data['categories']
    helper = WorkFlowHelper()
    helper.create(name,description,tenant,levels,categories)

在helper类中,im从同一个类中的一个函数调用其他函数。我对如何在函数中传入call.Now有疑问,我不能保存模型,一切都能正常工作,但就在post之后,它显示的create()没有返回object instanace AssertionError..but它正在保存模型并正常工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-20 16:32:09

这是可行的:

代码语言:javascript
复制
class WorkFlowHelper:


    def assign_level_permissions(self,workflow_level,level):
        for permission in level['permissions']:
            workflow_permission_obj = WorkflowPermission.objects.get(short_name=permission['short_name'])
            workflow_level.permissions.add(workflow_permission_obj)

    def create_levels(self,workflow,levels):
        for level in levels:
            workflow_level = WorkflowLevel()
            workflow_level.workflow=workflow,
            workflow_level.level = level['level']
            workflow_level.operation=level['operation'] 
            workflow_level.save()
            workflow.levels.add(workflow_level)
            self.assign_level_permissions(workflow_level,level)

    def create_categories(self,workflow, categories):
       for category in categories:
           workflow_category_obj = WorkflowCategory.objects.get(short_name=category['short_name'])
           workflow.categories.add(workflow_category_obj)

    def create(self,name, description,tenant, levels, categories):
        workflow = Workflow.objects.create(name=name, description=description, tenant=tenant)
        self.create_levels(workflow,levels)
        self.create_categories(workflow,categories)
        workflow.save()

        return workflow

在序列化程序中:

代码语言:javascript
复制
  def create(self, validated_data):
        name=validated_data['name']
        description=validated_data.get('description'),
        tenant=self.context['request'].user.tenant
        levels = self.initial_data['levels']
        categories = self.initial_data['categories']
        helper = WorkFlowHelper()
        workflow = helper.create(name,description,tenant,levels,categories)

        return workflow
票数 0
EN

Stack Overflow用户

发布于 2019-02-20 15:55:42

self是对对象本身的引用。使用self作为函数的第一个参数,您可以创建实例方法。因此,如果要使用instance方法,则需要初始化该类的对象,然后使用该对象调用函数。例如,在这里:

代码语言:javascript
复制
helper = WorkFlowHelper()  # create a `WorkFlowHelper` object

helper.create(creates,name,description,tenant,levels,categories)
# here you don't need to pass `self`, because it is referencing to it to the helper object

作为参考,您可以查看here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54781263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档