2011-05-25 5 views
1

Je veux utiliser raw_id_fields sur une relation ManyToMany dans l'admin, et je veux que chaque objet associé apparaisse sur sa propre ligne (par opposition à une liste séparée par des virgules dans un seul champ, qui est le comportement par défaut). A la suite des exemples repérés dans la nature, il semble que je devrais être en mesure de le faire:raw_id_fields et ManyToMany dans Django admin

# models.py 
class Profile(models.Model): 
    ... 
    follows = models.ManyToManyField(User,related_name='followees') 

# admin.py 
class FollowersInline(admin.TabularInline): 
    model = Profile 
    raw_id_fields = ('follows',) 
    extra = 1 

class ProfileAdmin(admin.ModelAdmin): 
    search_fields = ('user__first_name','user__last_name','user__username',) 
    inlines = (FollowersInline,) 

admin.site.register(Profile,ProfileAdmin) 

Mais qui génère l'erreur:

<class 'bucket.models.Profile'> has no ForeignKey to <class 'bucket.models.Profile'> 

Je ne comprends pas ce que je fais mal ici . Merci pour vos suggestions

Répondre

1

On dirait que vous définissez le mauvais modèle pour votre InlineAdmin comme modèle pour les adeptes que vous définissez est User et non Profile.

En regardant le docs je dirais que vous devriez essayer:

class FollowersInline(admin.TabularInline): 
    model = Profile.follows.through 

et

class ProfileAdmin(admin.ModelAdmin): 
    .... 
    exclude = ('follows',) 
    inlines = (FollowersInline,) 
+0

Merci Arie, mais qui me donne: 'FollowersInline.raw_id_fields' VISE champ « suit 'qui manque dans le modèle' Profile_follows '. suit existe en tant que champ sur le profil. – shacker

+0

Mmmh, probablement je ne comprends pas complètement ce que vous essayez de faire: Vous essayez de relier 'Followers' et' Profiles', n'est-ce pas? D'après ce que je comprends, vous devriez être capable d'omettre 'raw_id_fields = ('suit',)' sur votre 'InlineAdmin'. Vous pouvez ensuite utiliser les formulaires en ligne pour associer 'Followers' (' User') à 'Profiles'. – arie

+0

Les suiveurs ne sont pas un modèle distinct - 'follows' est le nom d'un champ m2m sur le modèle Profile. Je peux omettre suit de ProfileAdmin, mais quand j'ajoute inlines = (FollowersInline,) à ProfileAdmin, j'obtiens l'une des deux erreurs décrites ci-dessus, selon que j'utilise 'model = Profile' ou 'model = Profile.follows.through' . Merci. – shacker