我有一个自定义用户数据的配置文件模型:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, null=False)
# more stuff...
我还有一个通知应用程序,它允许模型向用户发送通知和电子邮件。
我希望用户可以选择打开或关闭不同的通知,但我不想像这样将大量布尔字段列表添加到配置文件中:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, null=False)
send_model1_notice1 = models.BooleanField()
send_model1_email1 = models.BooleanField()
send_model1_notice2 = models.BooleanField()
send_model1_email2 = models.BooleanField()
send_model2_notice1 = models.BooleanField()
send_model2_email1 = models.BooleanField()
send_model3_notice1 = models.BooleanField()
send_model3_email1 = models.BooleanField()
# etc...
其中 modelx 是作为通知来源的某个模型或其他应用程序,而 noticex/emailx 是通知的某些特定原因。
我在想一种更可持续的方法是创建一个 ProfileOptions 模型,外部模型可以使用它来定义自己的通知设置。
这样,当我添加一个新的应用程序/模型时,我可以以某种方式将其通知源链接到 ProfileOptions 模型,并让这些选项以神奇的方式打开或关闭它们出现在用户的配置文件中。
这有意义吗?如果是这样,有可能吗?如果是这样,这是个好主意吗?如果是这样,我应该使用什么结构来连接模型、ProfileOptions 和用户的 Profile?
显然我希望对最后一个问题有答案,但我不想排除其他问题的答案可能是“否”的可能性。