Django Admin: Ordering of ForeignKey and ManyToManyField relations referencing User

后端 未结 4 1081
情书的邮戳
情书的邮戳 2020-11-30 04:42

I have an application that makes use of Django\'s UserProfile to extend the built-in Django User model. Looks a bit like:

class Us         


        
相关标签:
4条回答
  • 2020-11-30 05:29

    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
    
    class TeamForm(forms.ModelForm):
        manager = forms.ModelChoiceField(queryset=User.objects.order_by('username'))
    
        class Meta:
            model = Team
    
    class TeamAdmin(admin.ModelAdmin):
        list_display = ('name', 'manager')
        form = TeamForm
    
    0 讨论(0)
  • 2020-11-30 05:36

    This

    class Meta:
        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.

    0 讨论(0)
  • 2020-11-30 05:41

    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"]
    
    0 讨论(0)
  • 2020-11-30 05:42

    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:

    class OrderedUser(User):
        class Meta:
            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)
    
    0 讨论(0)
提交回复
热议问题