ModelAdmin сортировка? - PullRequest
       17

ModelAdmin сортировка?

7 голосов
/ 25 апреля 2011

С помощью интерфейса администратора Django, как вы гарантируете, что объекты в HTML, выбранные несколько, будут отсортированы в некотором порядке (предпочтительно в алфавитном порядке)? Вопрос в том, что у меня 3 модели - CD, Song, Singer. Song - одна из панелей администратора CD, встроенная в CD, а Singer - множество полей, которые я бы хотел отсортировать!

Мой model.py файл:

class CD(models.Model):

    cd_name = models.CharField("CD Name",max_length=50)
    date = models.DateField("CD Release Date")
    photo = models.ImageField("CD Cover",blank=True,upload_to='covers')
    singers = models.ManyToManyField(Singer,blank=True,null=True) 

    def __unicode__(self):
        return self.cd_name

class Song(models.Model):

    cid = models.ForeignKey(CD)
    track_num = models.PositiveIntegerField("Track Number",max_length=2) 
    song_name = models.CharField("Song Name",max_length=50)
    soloists = models.ManyToManyField(Singer,blank=True,null=True) 
    stream_url = models.URLField("Stream URL", blank=True)

    def __unicode__(self):
        return self.song_name

class Singer(models.Model): (not relevent)

Мой admin.py файл:

class SongInline(admin.TabularInline):
    model = Song
    extra = 0

class CDAdmin(admin.ModelAdmin):

    list_display = ('cd_name', 'date')

    inlines = [
        SongInline,
    ]

admin.site.register(CD, CDAdmin)

1 Ответ

2 голосов
/ 25 апреля 2011

formfield_for_manytomany

class SongInline(admin.TabularInline):
    model = Song
    extra = 0

    def formfield_for_manytomany(self, db_field, request, **kwargs):
            if db_field.name == "soloists":
                kwargs["queryset"] = Singer.objects.order_by('last_name')
            return super(SongInline, self).formfield_for_manytomany(db_field, request, **kwargs)

Это отвечает на ваш конкретный вопрос о "ModelAdmin Ordering", но в вашем случае вы можете просто определить порядок по умолчанию для вашей m2m модели через модель ordering модель мета-класс вариант.

http://docs.djangoproject.com/en/dev/ref/models/options/#ordering

class Singer(models.Model):
    # my model
    class Meta:
        ordering = ['name'] # your select box will respect this as well.
...