django的行动

时间:2009-05-11 14:23:31

标签: django django-admin

如何根据字段的值启用或禁用操作。例如在我的模型中,我有一个状态字段,其中包含值'activate','pending','expired'。我正在制作将状态设置为“激活”的操作。知道我希望仅在状态为“待处理”时启用操作。

3 个答案:

答案 0 :(得分:1)

这是策略设计模式的某种组合。

您将为操作定义方法函数,并且您希望该方法函数对模型实例的状态敏感。

这就是我们的工作。

class SpecialProcessing( object ):
    def __init__( self, aModelObject ):
        self.modelObject= aModelObject
    def someMethod( self ):
        pass

class SpecialProcessingActivate( SpecialProcessing ):
    def someMethod( self ):
        # do work if possible or raise exception of not possible

class SpecialProcessingPending( SpecialProcessing ):
    def someMethod( self ):
        # do work if possible or raise exception of not possible

class SpecialProcessingExpired( SpecialProcessing ):
    def someMethod( self ):
        # do work if possible or raise exception of not possible

class MyObject( models.Model ):
    status = models.CharField( max_length = 1 )
    def setState( self ):
        if self.status == "a":
            self.state = SpecialProcessingActivate(self)
        elif self.status == "p":
            self.state = SpecialProcessingPending(self)
        elif self.status == "x":
            self.state = SpecialProcessingExpired(self)
        else:
            raise Exception( "Ouch!" )
    def doSomething( self ):
        self.setState()
        self.state.someMethod()

这样,我们可以自由地添加新状态(和状态转换规则),而不会过多地干扰模型类。

答案 1 :(得分:0)

管理员操作方法为您提供了一个查询集。只需打一个排除或过滤待处理的

答案 2 :(得分:-1)

我认为使用queryset是一种很好的方法