2010-09-02 6 views
6

Voici ma configuration:Commander un champ Many-to-Many dans Django admin

from django.contrib.auth.models import User 

class Product(models.Model): 
    ... 
    email_users = models.ManyToManyField(User, null=True, blank=True) 
    ... 

[ailleurs]

class ProductAdmin(admin.ModelAdmin): 
    list_display = ('name','platform') 

admin.site.register(Product, ProductAdmin) 

Mon principal problème est, quand je consulte la page "produit" dans la section admin, les utilisateurs d'e-mail ne sont pas classés par défaut avec leur identifiant, et je voudrais qu'ils soient triés par nom d'utilisateur.

D'après ce que je l'ai lu jusqu'à présent, il semble que je dois être ajouter:

email_users.admin_order_field = 'xxxx' 

Mais je ne suis pas tout à fait sûr de ce que la syntaxe est d'accéder au nom d'utilisateur.

+0

Avez-vous essayé cette astuce en utilisant un ModelForm et ModelChoiceField? http://stackoverflow.com/questions/1474135/ – hao

+0

Merci! Apparemment, mon search-fu n'est pas encore à la hauteur. :) – MichaelC

Répondre

2

La réponse a été mentionné dans le commentaire de Hao Lian ci-dessus, pour l'essentiel, c'est ce qu'il fallait faire:

class ProductAdminForm(ModelForm): 
    email_users = forms.ModelMultipleChoiceField(queryset=User.objects.order_by('username')) 

    class Meta: 
     model = Product 

class ProductAdmin(admin.ModelAdmin): 
    list_display = ('name','platform') 
    form = ProductAdminForm 

admin.site.register(Product, ProductAdmin) 

mine était légèrement différente dans le sens où j'obligé la forms.ModelMultipleChoiceField, alors que la réponse fourni formulaires utilisés.ModelChoiceField()

Questions connexes