【问题标题】:Customize Django Group Model自定义 Django 组模型
【发布时间】:2016-01-09 04:22:50
【问题描述】:

我正在尝试在 Django 管理员中向“组”添加一个字段 - 例如,当您在后端创建一个组时,您定义了“名称”和“权限”,我想添加一个字段到该列表(CharField)。这是否需要一个新的应用程序,或者我可以在我的根 models.py 中扩展 Group 模型吗?

这里是 django 和 python 的新手,如果问题措辞不当,请见谅。

这是我目前所拥有的:

#models.py

from django.db import models
from django.contrib.auth.models import Group

class AppDBName(Group):
    AppDB = models.CharField(max_length=30)
    def __unicode__(self):
        return self.AppDB

#admin.py

from django.contrib import admin
from .models import AppDBName   

admin.site.register(AppDBName)

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以尝试创建一个新模型,该模型将扩展 Django 内置的组模型。为此,您应该将一个新模型(例如 GroupExtend)链接到带有 OneToOne 字段的原始模型,就像可以为用户 (link) 所做的那样:

    from django.contrib.auth.models import Group
        
    class GroupExtend(models.Model):
        group = models.OneToOneField(Group, on_delete=models.CASCADE)
        # other fields
    

    【讨论】:

    • 如何将其拉入管理员?会是:从 .models 导入 GroupExtend admin.site.register(GroupExtend)
    • 由于您将创建的新组将是GroupGroupExtend 的实例,您可以注册GroupExtend(然后您需要定义相关的Group手动)或将其设置为 Group 模型的内联并重新注册后者,如文档中所示(我已经发布了链接)。
    • 但是在这里,例如要创建一个“组”,我需要先创建一个 Group 模型的实例,然后将该实例传递给 GroupExtend 模型。是不是更乱了点?我的意思是,似乎直接从 Group 模型继承应该更明智。您能否解释一下为什么这种创建另一个模型然后使用 OneToOneField 将其加入 Group 的方法应该是这种方法?这真的很有帮助。
    【解决方案2】:

    您不需要创建新应用,只需将 django admin models.py 覆盖到您的项目中并根据您的要求对其进行自定义。

    https://docs.djangoproject.com/en/1.8/topics/db/models/

    【讨论】:

    • 谢谢。我将类添加到models.py并在admin.py中注册,但仍然没有任何运气。添加上面的代码供参考。
    猜你喜欢
    • 2012-07-06
    • 2016-07-31
    • 1970-01-01
    • 2015-07-09
    • 2015-09-17
    • 2017-08-13
    • 2013-04-18
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多