Подтвердить что ты не робот

Порядок сортировки по умолчанию в Django, используя соответствующее поле таблицы

Можно ли установить порядок сортировки по умолчанию для модели для поля из связанной модели (а не целочисленного ключа), то есть что-то, что дает предложение SQL order by с полем из обеих моделей? Если да, то как? Я могу сделать это через query_by, но я не могу понять, как установить его по умолчанию. Спасибо.

class Foo(models.Model):
    name = models.CharField(max_length=50)

class Bar(models.Model):
    related = models.ForeignKey(Foo)
    bar_date = models.DateField()

    class Meta:
        ordering = ('bar_date', 'related.name', )
4b9b3361

Ответ 1

Я использую django 1.2.7 и вместо подключения ForeignKey.Attribute мы должны использовать "__", поэтому этот код будет работать:

class Meta:
    ordering = ('bar_date', 'related__name', )

Ответ 3

В качестве альтернативы order_with_respect_to (который поддерживает только одно поле), вы можете использовать настраиваемый менеджер для обеспечения заказа. Это также позволяет вам заказывать несколько полей в Foo и иметь обычный менеджер Bar.objects. Вам нужно будет проверить, применяется ли сначала заказ Meta.Addinging или заказного менеджера.

class FooSortedManager(models.Manager):
    def get_query_set(self):
        return super(FooSortedManager, self).get_query_set().order_by('foo__name')

class Foo(models.Model):
    name = models.CharField(max_length=50)

class Bar(models.Model):
    related = models.ForeignKey(Foo)
    bar_date = models.DateField()

    foo_sorted = FooSortedManager()

    class Meta:
        ordering = ('bar_date',)

Ответ 4

hmm... Я решаю аналогичную вещь, повышая эффективность старого приложения django, написанного до qs-rf, где, вероятно, использовалась "точка", обозначенная?... мне потребовалось несколько часов, чтобы разложить "что-то", и я до сих пор не уверен, но... попытайтесь заменить точку "__" (двойные подчеркивания), это может помочь,.. На самом деле, curentlly, я все еще НАДЕЖДА СЛИШКОМ: -)))

@stuart: для "order_with_respect_to" я прочитал что-то о автоматически добавленном физическом поле модели в дочернюю таблицу... Я не понимаю, как все здесь... Документация IMHO очень плохо о упорядочении синтаксиса, howgh!

Без комментариев:-) http://code.djangoproject.com/ticket/8975

В любом случае, мне нравится Django, но...: -))

Ответ 5

В современной версии django это:

class Meta:
        ordering = ['word']

Ответ 6

class Question(models.Model):

  question_text=models.CharField(max_length=200)
        class Meta:
    verbose_name_plural="  Question"

class Choice(models.Model):

  question=models.ForeignKey(Question,on_delete=models.CASCADE)
    class Meta:
    verbose_name_plural=" Choice"

Либо вы можете изменить количество пробелов перед именем класса, как указано выше, или заказать его с помощью чисел, как показано ниже:

class Question(models.Model):

  question_text=models.CharField(max_length=200)
        class Meta:
    verbose_name_plural="1.Question"

class Choice(models.Model):

  question=models.ForeignKey(Question,on_delete=models.CASCADE)
    class Meta:
    verbose_name_plural="2.Choice"