Django - 多个用户为同一个对象分配不同的名称
Posted
技术标签:
【中文标题】Django - 多个用户为同一个对象分配不同的名称【英文标题】:Django - Multiple users assign different names for the same object 【发布时间】:2017-04-27 06:35:33 【问题描述】:我正在尝试为关系添加属性。
我有一个模型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)
有没有可能以某种简单的方式做到这一点?
【问题讨论】:
为什么不向调度器添加字段名称和类型?然后用户将选择调度程序的类型并为其指定名称。 因为如果一个用户1为调度程序指定名称,它也会影响其他用户。 确保将其标记为已解决 【参考方案1】:你可以做的是有另一个模型,将Users
映射到Schedulers
,并在那里有一个name
属性。该模型将具有 user_id
、scheduler_id
和 scheduler_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 admin 中编辑组对象时将用户对象分配给组