Администратор Django: упорядочивание по принципу FK'd - PullRequest
0 голосов
/ 07 октября 2011

У меня есть простое приложение для фотоконкурса Django, которое имеет три простых определения модели:

class Person(models.Model):
    name = models.CharField(unique=True, max_length=255)
    id = models.AutoField(primary_key=True)
    class Meta:
        db_table = u'people'
    def __unicode__(self):
        return self.name

class Round(models.Model):
    theme = models.CharField(max_length=255)
    number = models.IntegerField()
    id = models.AutoField(primary_key=True)
    class Meta:
        db_table = u'rounds'
    def __unicode__(self):
        return self.season.name+" - "+self.theme

class Entry(models.Model):
    rank = int
    total_score = models.SmallIntegerField()
    id = models.AutoField(primary_key=True)
    person = models.ForeignKey(Person, db_column='person')
    round = models.ForeignKey(Round, db_column='round')

A Round имеет несколько Entry объектов, и каждый Entry имеет один Person. Один Person может иметь несколько Entrys в разных Rounds.

В представлении администратора, я хотел бы иметь возможность выбрать Round и просмотреть подробную информацию о Entry элементах. Это я могу сделать со следующим:

class EntryInline(admin.TabularInline):
    model = Entry
    fields = ['comments','person','total_score','image']
    readonly_fields = ['person','image']
    extra = 0

class RoundAdmin(admin.ModelAdmin):
    fields = ['theme','number']
    inlines = [EntryInline]

Однако это сортирует Entry, по-видимому, произвольно. Я могу использовать новое ключевое слово ordering django в классе EntryInline, чтобы указать, что порядок должен быть указан для данного человека, но этот порядок присваивается свойством person Id, а не их свойством name.

Как мне заказать этот встроенный объект в свойстве FK'd Person.name?

1 Ответ

4 голосов
/ 07 октября 2011

Добавьте это в EntryInline классе:

ordering = ["person__name"]
...