Skip to content Skip to sidebar Skip to footer

Django Admin: Ordering Of Foreignkey And Manytomanyfield Relations Referencing User

I have an application that makes use of Django's UserProfile to extend the built-in Django User model. Looks a bit like: class UserProfile(models.Model): user = models.Foreign

Solution 1:

This

classMeta:
    ordering = ['username']

should be

ordering = ['user__username']

if it's in your UserProfile admin class. That'll stop the exception, but I don't think it helps you.

Ordering the User model as you describe is quite tricky, but see http://code.djangoproject.com/ticket/6089#comment:8 for a solution.

Solution 2:

One way would be to define a custom form to use for your Team model in the admin, and override the manager field to use a queryset with the correct ordering:

from django import forms

classTeamForm(forms.ModelForm):
    manager = forms.ModelChoiceField(queryset=User.objects.order_by('username'))

    classMeta:
        model = Team

classTeamAdmin(admin.ModelAdmin):
    list_display = ('name', 'manager')
    form = TeamForm

Solution 3:

This might be dangerous for some reason, but this can be done in one line in your project's models.py file:

User._meta.ordering=["username"]

Solution 4:

For me, the only working solution was to use Proxy Model. As stated in the documentation, you can create own proxy models for even built-in models and customize anything like in regular models:

classOrderedUser(User):
    classMeta:
        proxy = True
        ordering = ["username"]
    def__str__(self):
        return'%s %s' % (self.first_name, self.last_name)

After that, in your model just change Foreign Key to:

user = models.OneToOneField(OrderedUser, unique=True)

or even more suitable

user = models.OneToOneField(OrderedUser, unique = True, parent_link = True)

Post a Comment for "Django Admin: Ordering Of Foreignkey And Manytomanyfield Relations Referencing User"