gpt4 book ai didi

python - 状态模式 - Django 模型

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:28 25 4
gpt4 key购买 nike

我目前正在尝试在 Django 中实现状态模式。以这些模型为例:

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?

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

r = Restaurant(name='whatever')
r.state.doSomething()

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

最佳答案

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

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 定义状态:

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)

如果你真的需要单独的状态模型,你当然可以做到,但是 toggle_state 函数必须在 Resaraunt 模型中。

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()

关于python - 状态模式 - Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com