Применить сортировку по полю во внешнем ключе django остальные рамки - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть три модели:

Class Book(models.Model):
book_name = models.CharField(max_length=10)
author = models.Foreignkey('author', on_delete=models.cascade)

Class Author(models.Model):
name = models.CharField(max_length=50)
addr = models.CharField(max_length=50)

Class Bookinfo(models.Model):
book = models.ForeignKey('book', on_delete=models.cascade)
page_number = models.IntegerField()

Сериализаторы:

Class bookserializer(modelserializer):
Class Meta:
    Model= book
    Fields = ("__all__")

Class authorserializer(modelserializer):
Class Meta:
    Model= author
    Fields = ("__all__")

Class bookinfoserializer(modelserializer):
Class Meta:
    Model= bookinfo
    Fields = ("__all__")
    Depth=2

Просмотр:

Class Bookinfoviewset(viewsets.modelviewset):
Queryset= bookinfo.objects.all()
Serializer_class= bookinfoserializer

В ответ я получаю вложенные значения:

{
    Book_id:{
        Book_name:
        Author_id: {
            Name:
            Addr:
        }
    },
    Page_number:
}

В серверной части я использую PageNumberPagination, searchfilter и ordering.

В представлении информации о книге я хочу применить порядок к book_name, которое находится внутри book_id, который является внешним ключом.

Как это сделать, не влияя на фильтр и нумерацию страниц?

И есть ли способ получить поля во внешнем ключе непосредственно в основном ответе, например:

{   
    Book_name:

    Name:
    Addr:
    Page_number
}

Я используя python 3,5 django 2,2,9.

1 Ответ

0 голосов
/ 13 февраля 2020

In Bookinfoviewset add:

def filter_queryset(self, queryset):
    queryset = super(Bookinfoviewset, self).filter_queryset(queryset)
    return queryset.order_by("book__book_name")

Более элегантной альтернативой будет добавление к Bookinfoviewset:

ordering_fields = ("book__book_name")
ordering = ("book__book_name")

Но не уверен, что это работает. Дайте мне знать, и я обновлю ответ.

...