Django - 是否建议用户使用代理模型?

标签 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 = [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)

但是,我意识到如果使用此方法,会出现一些问题:

  1. 不允许我添加 外键的表格内联 因为 Django 的关系 提示没有外键 对于用户代理。
  2. 网址困惑。 Django 将 登记 http://abc.com/admin/auth/teacherproxy/ 代替 http://abc.com/admin/auth/user/ Django 找不到老师 对象。

对此有何评论?

最佳答案

通常,Django 希望您通过添加用户配置文件来扩展用户模型。以下是有关如何执行此操作的文档:

http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles

然后,您可以在每个用户的个人资料中添加一个字段来指定他们是否是教师。

就我个人而言,我发现按照文档建议的方式使用 Django 更容易,因为这样你就知道一切正常。另外,如果将来出现问题,也更容易获得其他人的支持。因此,我会添加一个配置文件类来按照他们所说的方式扩展用户模型。

关于Django - 是否建议用户使用代理模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5233690/

相关文章:

python - 在 django admin 中设置自定义 SQL

Django:ForeignKey 和 ManyToManyField 之间的区别

python - Django:导入错误:无法导入名称 'User'

django - 值错误: save() prohibited to prevent data loss due to unsaved related object 'sender'

Django-请求中的用户代理模型

python - Django - 将图像添加到 Django 管理中的列表显示

python - Django 导入导出 行号 : 1 - u"Column 'id' not found

python - 是否可以使用 emacs 使 Python etags 更智能一些?

python - 使用 mod_wsgi 部署具有域和子域的 django 应用程序

python - Django - 在同一模型中有多个外键