Django - 通用小部件表的模型设计

时间:2012-05-12 22:16:41

标签: django database-design django-models

我正在尝试为以下场景构建正确的设计

  1. A WidgetType
  2. 来自Widget
  3. 类型的WidgetType
  4. 每个Widget类都有一些设置,由给定的WidgetType
  5. 定义
  6. 添加新Widget时,我希望只能选择允许的Setting
  7. 这是我带来的模型:

    class Widget(models.Model):
        title = models.CharField(max_length=200)
        widgettype = models.ForeignKey('WidgetType')
    
    class WidgetType(models.Model):
         name = models.CharField(max_length=200)
    
    class WidgetSettingOption(models.Model):
        widgettype = models.ForeignKey('WidgetType')
        key = models.CharField(max_length=200)
        description = models.CharField(max_length=2000)
    
    class Setting(models.Model):
        widget = models.ForeignKey('Widget')
        key = models.ForeignKey('WidgetSettingOption')
        value = models.CharField(max_length=200)
    

    虽然这解决了我的问题,但我觉得这不是最佳选择。由于我无法仅限制管理表单中允许的值集的设置密钥,因此无需自定义管理表单

    建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

取代SettingWidget的FK,您可以在ManyToManyFieldWidgetSetting,并使用limit_choices_to } kwarg将选择限制在适当的设置。