目前,我正在使用几种代理模型来区分管理站点中的不同用户。
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 的关系 提示没有外键 对于用户代理。
- 网址困惑。 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/