2010-09-02 58 views
6

这里是我的设置:在Django管理订购一多到许多领域

from django.contrib.auth.models import User 

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

[别处]

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

admin.site.register(Product, ProductAdmin) 

我的主要问题是,当我观看了“产品”页面在管理部分中,电子邮件用户默认情况下不会按他们的ID进行排序,我希望用他们的用户名进行排序。

从我至今读,好像我必须补充说:

email_users.admin_order_field = 'xxxx' 

但我不肯定的语法是访问的用户名是什么。

+0

您是否尝试过使用ModelForm和ModelChoiceField这个技巧? http://stackoverflow.com/questions/1474135/ – hao 2010-09-02 19:56:26

+0

谢谢!显然我的搜索功能还没有达到标准。 :) – MichaelC 2010-09-03 13:08:52

回答

2

答案在上面郝离岸的评论称,从本质上讲,这是需要做:

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) 

矿是我所需要的forms.ModelMultipleChoiceField意义略有不同,而答案提供使用的形式.ModelChoiceField()