Django向管理员用户表单添加ManyToMany关系

时间:2014-09-25 18:47:44

标签: python django django-models django-forms django-admin

我正在使用django管理员功能作为我网站的后端管理。除了一件事,它似乎完全可以满足我的需求。我的一个模型与用户有多对多的关系。这是模型:

class Facility(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.TextField()     
    users = models.ManyToManyField(User)    
    def __str__(self):
        return str(self.id)    

我已经让它允许我在设施页面上添加用户到设施,但由于内置了Admin表单,我不知道如何修改它。我在SO上发现了一些看起来像我想要的东西:

admin.site.unregister(User)

class MyUserAdmin(UserAdmin):
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'email', 'password1', 'password2')}
        ),
    )

admin.site.register(User, MyUserAdmin)

我尝试更换facilityfacilitiesfacilitys的电子邮件,但似乎很明显,这不起作用,当然也没有。有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在django中,此功能命名为related_name或"返回引用"在SQLAlchemy中。正如您在docs中看到的那样:

  

如果模型具有ForeignKey,则外键模型的实例将有权访问返回第一个模型的所有实例的Manager。默认情况下,此Manager名为FOO_set,其中FOO是源模型名称,小写。

因此,在您的情况下,您应该使用facility_set或在related_name上重新定义users  Facility模型中的ManyToMany字段。

BTW,@schillingt:建议使用InlineModelAdmin比其他任何事情更容易和优雅。