【问题标题】:Django: Want a ManyRelatedManager, getting ManyToManyField insteadDjango:想要一个 ManyRelatedManager,而不是获得 ManyToManyField
【发布时间】:2011-05-03 22:02:50
【问题描述】:

所以在我的项目中,我试图将 User 模型扩展到 Staff 类,将 Group 模型扩展到 PermGroup 类。但是,当我在员工的组字段(从 User 继承)中保存 PermGroup 时,它只会将 PermGroup 对象保存为组,并且我在 PermGroup 类中定义的所有字段和方法都被剥离了。所以我决定最好的做法是覆盖组字段。从我发现的一个较早的 stackoverflow 问题和 Django 文档中,这应该可以工作。

class Staff(User):
    User.groups = models.ManyToManyField('PermGroup', blank=True)

我需要使用“PermGroup”,因为该类稍后会显示在文件中,并且 PermGroup 有一个依赖于 Staff 类的字段,所以如果我切换顺序我会遇到同样的问题,仅在 PermGroup 类中.

现在我遇到的问题是组现在是一个 ManyToManyField 对象,其中所有其他“manytomany”字段都是 ManyRelatedManagers。我希望群组成为 ManyRelatedManager,但我不知道怎么做。

当我使用“PermGroup”模型调用初始化组时,是否可以让组成为 ManyRelatedManager?

如果我的方法是错误的,您可以建议在 Staff 类中保存 PermGroups 的替代方法。我将不胜感激。

【问题讨论】:

    标签: django django-models django-users


    【解决方案1】:

    为什么不让您的员工成为标准模型,并为其对应的用户提供一个 ForeignKey(更准确地说是 OneToOneField)?

    而且,要消除循环依赖问题,您只需使一个依赖于另一个。例如,PermGroup 模型可以具有该组中员工的多对多字段。 Staff 不需要 PermGroup,因为如果您想查看成员所属的组,您只需执行以下操作:

    groups_theyre_in = PermGroups.objects.filter(staff_members__id=id_were_looking_for)
    

    【讨论】:

    • 好的,我们已经解决了这个问题,以消除 PermGroup 对 Staff 的依赖。我原来的问题仍然存在。当我覆盖用户的组字段“User.groups = models.ManyToManyField(PermGroup, blank=True)”时,它仍然使组成为 ManyToManyField 对象,而不是 ManyRelatedManager 对象。如何在不改变其对象的情况下覆盖该字段?
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多