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

Posted

技术标签:

【中文标题】Django - 多个用户为同一个对象分配不同的名称【英文标题】:Django - Multiple users assign different names for the same object 【发布时间】:2017-04-27 06:35:33 【问题描述】:

我正在尝试为关系添加属性。

我有一个模型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)

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

【问题讨论】:

为什么不向调度器添加字段名称和类型?然后用户将选择调度程序的类型并为其指定名称。 因为如果一个用户1为调度程序指定名称,它也会影响其他用户。 确保将其标记为已解决 【参考方案1】:

你可以做的是有另一个模型,将Users 映射到Schedulers,并在那里有一个name 属性。该模型将具有 user_idscheduler_idscheduler_name 作为属性。

否则,您可以在 Product 模型中执行此操作,并间接指向所需的 Scheduler

【讨论】:

请注意,您在此处描述的是多对多关系,其中包含直通模型上的额外属性。【参考方案2】:

我提出了类似的建议

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中,如果用户更改调度器实例的名称,则不会受到影响。

另外,如果您需要更多数据,您可以分离 SchedulerCategory 并将其他类别字段添加到 Scheduler:

category = models.ForeignKey(SchedulerCategory, blank=True, null=True)

当用户选择调度器的类型时,我不明白,他创建了特定类型的新调度器实例。这个 Scheduler 实例将是唯一的,不会受到其他用户的影响。这也意味着您可以轻松地在其中保存任何名称。

用你的话来说:

用户创建产品并从允许的调度程序中进行选择。当他们 选择调度程序,他们可以为该调度程序分配一些名称。

在我看来: 用户创建产品并从允许的调度程序实例中选择不是,而是从 scheduler_types 或 scheduler_categories 中选择。然后创建一个新的 Scheduler 实例,您可以在其中保存名称。

【讨论】:

以上是关于Django - 多个用户为同一个对象分配不同的名称的主要内容,如果未能解决你的问题,请参考以下文章

Django:获取子对象匹配条件的父对象

Django中不同的用户级别

在 Django admin 中编辑组对象时将用户对象分配给组

DJANGO - 仅针对模型中的某些对象将管理面板的权限分配给用户

情节提要:为每个尺寸类的多个对象分配 IBOutlet

django中不同用户类型的单独“管理”界面