Администратор Django: упорядочивание строк на основе свойства FK ‘d

#django #django-admin

#django #django-admin

Вопрос:

У меня есть простое приложение для конкурса фотографий 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 new в EntryInline классе, чтобы указать, что порядок должен быть для person, но это упорядочивает свойство person Id , а не их name свойство.

Как бы я упорядочил это встроенное свойство FK Person.name ‘d?

Ответ №1:

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

 ordering = ["person__name"]