2010-09-02 10 views
6

Hier ist mein Setup:ein in Django Admin Many-to-Many-Feld Bestell

from django.contrib.auth.models import User 

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

[anderswo]

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

admin.site.register(Product, ProductAdmin) 

Mein Hauptproblem ist, wenn ich das "Produkt" Seite bin sehen Im Admin-Bereich werden E-Mail-Benutzer standardmäßig nicht nach ihrer ID sortiert, und ich möchte, dass sie nach ihrem Benutzernamen sortiert werden.

Von dem, was ich bisher gelesen habe, scheint es, wie ich das Hinzufügen werden müssen:

email_users.admin_order_field = 'xxxx' 

Aber ich bin mir nicht ganz sicher, was die Syntax, um den Benutzernamen für den Zugriff ist.

+0

Haben Sie diesen Trick mit einem ModelForm und ModelChoiceField versucht? http://stackoverflow.com/questions/1474135/ – hao

+0

Vielen Dank! Anscheinend ist mein Such-Fu noch nicht auf dem neuesten Stand. :) – MichaelC

Antwort

2

Die Antwort wurde auf dem in Hao Lian Kommentar oben, im Wesentlichen ist es das, was getan werden mußte:

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 im Sinne etwas anders war, dass ich die forms.ModelMultipleChoiceField erforderlich, während die Antwort mitgeliefertes verwendet forms.ModelChoiceField()