Django - 多个用户为同一个对象分配不同的名称

时间:2016-12-12 11:43:25

标签: python django django-models foreign-keys django-orm

我试图为关系添加属性。

我有一个模型SchedulerProductUser

数据库中有多个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)

是否有可能以某种简单的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以做的是,有另一个模型,将Users映射到Schedulers,并在那里有name属性。该模型将user_idscheduler_idscheduler_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实例,您可以在其中保存名称。