我试图为关系添加属性。
我有一个模型Scheduler
,Product
和User
。
数据库中有多个Scheduler
个对象。每个都可以有多个产品。每个产品都有一些调度程序。
用户可以选择与产品一起使用的调度程序。
我希望用户能够命名此调度程序(请注意,多个用户可以使用多个产品使用一个调度程序。)
用例:
用户创建产品并从允许的调度程序中进行选择。当他们选择调度程序时,他们可以为此调度程序指定一些名称。
对于 user1 ,id=5
的调度程序具有name='My scheduler - everyday'
对于 user2 ,同一个调度程序(id=5
)有name='Everyday schedule'
class Product(models.Model):
user = models.ForeignKey(User, null=False, blank=False)
scheduler = models.ForeignKey('Scheduler', null=True, blank=True, related_name='products')
class Scheduler(models.Model):
weekhours = models.ManyToManyField('WeekHour', related_name='schedulers')
identificator = models.TextField(null=True,blank=True)
是否有可能以某种简单的方式做到这一点?
答案 0 :(得分:1)
您可以做的是,有另一个模型,将Users
映射到Schedulers
,并在那里有name
属性。该模型将user_id
,scheduler_id
和scheduler_name
作为属性。
否则,您可以在Product
模型中执行此操作,并间接指向所需的Scheduler
。
答案 1 :(得分:0)
我建议类似于
SCHEDULER_TYPE = (
(1, _('Type1')),
(2, _('Type2')),
)
class Scheduler(models.Model):
weekhours = models.ManyToManyField('WeekHour', related_name='schedulers')
name = models.CharField(max_length=200, verbose_name=_('scheduler name'))
type = models.PositiveIntegerField(_('scheduler type'), choices=SCHEDULER_TYPE, default=1)
调度程序的类型将保存在SCHEDULER_TYPE中,如果用户将更改调度程序实例的名称,则不会被识别。
此外,如果您需要更多数据,可以将SchedulerCatergory分开并将其他类别字段添加到Scheduler中:
category = models.ForeignKey(SchedulerCategory, blank=True, null=True)
在用户选择调度程序类型的时候,我创建了一个特定类型的新调度程序实例。此Scheduler实例将是唯一的,不会受到其他用户的影响。这也意味着您可以轻松地在其中保存任何名称。
用你的话说:
用户创建产品并从允许的调度程序中进行选择。当他们 选择他们可以为此调度程序指定一些名称的调度程序。
在我看来: 用户创建产品并从允许的调度程序实例中选择不,但是从scheduler_types或scheduler_categories中选择。然后创建新的Scheduler实例,您可以在其中保存名称。