Django-推荐用户使用代理模型吗?

Django-推荐用户使用代理模型吗?,django,django-models,django-admin,Django,Django Models,Django Admin,目前,我正在使用几种代理模型来区分管理站点中的不同用户 class TeacherProxy(User): class Meta: proxy=True app_label = 'auth' verbose_name = 'Teacher' verbose_name_plural = 'Teachers' class TeacherAdmin(admin.ModelAdmin): #inlines = [Teach

目前,我正在使用几种代理模型来区分管理站点中的不同用户

class TeacherProxy(User):
    class Meta:
        proxy=True
        app_label = 'auth'
        verbose_name = 'Teacher'
        verbose_name_plural = 'Teachers'

class TeacherAdmin(admin.ModelAdmin):
    #inlines = [TeacherClassInline]
    def queryset(self,request):
        return User.objects.filter(groups__name='Teachers')
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "groups":
            qs = Group.objects.filter(name='Teachers')
            kwargs["queryset"] = qs
            kwargs["initial"] = qs
        return super(TeacherAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

admin.site.unregister(User)
admin.site.register(TeacherProxy,TeacherAdmin)
然而,我意识到,如果我使用这种方法,有两件事会破裂:

  • 不允许我添加 外键的列表行 因为Django的关系 抱怨没有外键 对于userproxy
  • URL被弄乱了。Django将 登记
    http://abc.com/admin/auth/teacherproxy/
    而不是
    http://abc.com/admin/auth/user/
    Django也找不到老师了 反对

  • 对此有何评论?

    Django通常希望您通过添加用户配置文件来扩展用户模型。以下是他们如何做到这一点的文档:

    然后,您可以在每个用户的配置文件中添加一个字段,以指定他们是否是教师


    就我个人而言,我发现按照文档建议的方式使用Django会更容易,因为这样你就知道一切都是有效的。另外,如果将来事情不顺利的话,从别人那里寻求支持会更容易。因此,我将添加一个profile类,以按照他们所说的方式扩展用户模型。

    Django支持将具有外键的模型内联到父类。请参见此错误:

    在Django模型继承的基础上,您正在使用一个代理模型,该模型应该是它引用的模型的透明传递。我还发现它工作得不太好,并抱怨没有合适模型的外键

    一种解决方案是使用Django泛型关系:

    将以下字段添加到模型中,而不是将foreignkey添加到父类:

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    

    Django现在可以拥有应用程序中任何其他型号的外键。它实际上存储它所指向的对象的id以及对象的类型(内容类型)。请注意,每次遵循foreignkey关系时,django都必须在content_types表中进行额外的查找,以确定泛型关系实际指向的模型。

    。只是在管理站点中,我想直观地分离用户,以便我可以应用我自己的管理类。啊,明白了。对不起,我完全误解了你的问题。不幸的是,我在增强管理界面方面没有太多经验。。。