Django 如何创建与继承的泛型关系?

Django 如何创建与继承的泛型关系?,django,django-models,Django,Django Models,我有这样的结构:一个活动可以包含多个动作。每一个行动都应该与一场运动有关。有不同类型的操作,如电子邮件、Web挂钩等。。这些操作的共同点是“运行”方法。当我运行活动的run方法时,与活动相关的操作也应该运行 我想这样的事情对我会有用的: class Campaign(models.Model): name = models.CharField(max_length=32) description = models.CharField(max_length=255) is_

我有这样的结构:一个活动可以包含多个动作。每一个行动都应该与一场运动有关。有不同类型的操作,如电子邮件、Web挂钩等。。这些操作的共同点是“运行”方法。当我运行活动的run方法时,与活动相关的操作也应该运行

我想这样的事情对我会有用的:

class Campaign(models.Model):
    name = models.CharField(max_length=32)
    description = models.CharField(max_length=255)
    is_active = models.BooleanField(default=False)

    def run(self, data):
        for action in self.actions.all():
            action.run(data)

class Action(models.Model):
    name = models.CharField(max_length=32)
    campaign = models.ForeignKey(
        Campaign,
        on_delete=models.CASCADE,
        related_name='actions',
    )

    class Meta:
        abstract = True

    def run(self, data):
        print(f'The {self.name} action ran.')
        print(f'Data: {data}')


class EmailAction(Action):
    subject = models.CharField(max_length=128)
    body = models.TextField()

    class Meta:
        db_table = 'email_action'

    def run(self, data):
        super(EmailAction, self).run(data)


class WebhookAction(Action):
    url = models.CharField(max_length=256)
    body = models.TextField()

    class Meta:
        db_table = 'webhook_action'

    def run(self, data):
        super(WebhookAction, self).run(data)
实现此工作流的最佳方式是什么

场景: 我将创建一个活动。例如,添加到购物车通知(活动名称)。 然后,我将创建一个EmailAction,并会说“您已将产品添加到购物车”。 如果有一天我需要将此事件推送到外部服务,我将创建一个web钩子操作。
也许我可以再发一封电子邮件:“这是您可能感兴趣的产品”

是否
活动
仅存储ID?没有其他信息吗?你能更详细地解释一下你的问题是什么吗?除了在您的活动模型中应该是“for action in self.actions.all()”之外,您的代码应该work@funnydman是的,有更多的字段,但我没有写它们,因为它们与问题无关。@Chris我的问题是:这种方法是实现这个场景的正确方法吗?还纠正了您指出的错误,谢谢。实际上它们是相关的,这将为构建更精确的数据库结构提供更多信息。