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)
然而,我意识到,如果我使用这种方法,有两件事会破裂:
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表中进行额外的查找,以确定泛型关系实际指向的模型。。只是在管理站点中,我想直观地分离用户,以便我可以应用我自己的管理类。啊,明白了。对不起,我完全误解了你的问题。不幸的是,我在增强管理界面方面没有太多经验。。。