简体   繁体   中英

Django Add ManyToMany Relationship to Admin User Form

I'm using the django admin feature as the backend administration for my site. It seems to work perfectly, out of the box for my needs, except for one thing. One of my models has a many-to-many relationship with a User. Here is the model:

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

I've gotten it to let me add users to the facility on the facility page, but since the Admin form is built in, I don't know how to modify it. I found something that looked like what I want on SO:

admin.site.unregister(User)

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

admin.site.register(User, MyUserAdmin)

I tried swapping out email for facility or facilities or facilitys , but it seemed pretty obvious that that wouldn't work, and of course it did not. Any one have any advice?

In django this feature names related_name or "back reference" in SQLAlchemy. As you can see in docs :

If a model has a ForeignKey, instances of the foreign-key model will have access to a Manager that returns all instances of the first model. By default, this Manager is named FOO_set, where FOO is the source model name, lowercased.

So, in your case you should use facility_set or redefine related_name on users ManyToMany field in Facility model.

BTW, @schillingt : suggestion to use InlineModelAdmin much more easy and elegant than anything else.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM