首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态模式- Django模型

状态模式- Django模型
EN

Stack Overflow用户
提问于 2013-12-08 05:25:17
回答 1查看 1.4K关注 0票数 4

以这些模型为例:

代码语言:javascript
复制
class Restaurant(models.Model):
    name = models.CharField()
    # other fields here ...


class State(models.Model):
    pass

class StateOpen(State):
    def toggle_open_closed():
        pass

class StateClosed(State):
    def toggle_open_closed():
        pass

现在,我如何让我的餐厅有一个状态,这个状态可以是StateOpen或StateClosed?

编辑:理想情况下,我希望能够这样做:

代码语言:javascript
复制
r = Restaurant(name='whatever')
r.state.doSomething()

# doSomething() being a function that each state child class has,
# but implemented differently
EN

回答 1

Stack Overflow用户

发布于 2013-12-08 05:29:07

不要为状态创建模型如果状态只能是两个'open‘和'closed',你可以在Restaurant模型中创建状态字段:

代码语言:javascript
复制
class Restaurant(models.Model):
    name = models.CharField()
    state = models.BooleanField(default=False)

    def toggle_open_closed(self):
        self.state = not self.state
        self.save()

您还可以在模型中使用预定义的状态和IntegerField列表定义状态:

代码语言:javascript
复制
RESTARAUNT_STATE = (
    (0, 'Open'),
    (1, 'Closed'),
    (2, 'Didnt decided yet, come here later!'),

    # you can define more states later
)

class Restaurant(models.Model):
    name = models.CharField()
    state = models.IntegerField(choices=RESTARAUNT_STATE)

代码语言:javascript
复制
class State(models.Model):
    name_of_state = models.CharField()

class Restaurant(models.Model):
    name = models.CharField()
    state = models.ForeignKey(State)

    def toggle_state(self):
        self.state = State.objects.get(...)
        self.save()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20446850

复制
相关文章

相似问题

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