Django Rest Framework отправляет набор запросов в сериализатор try SlugRelatedField

Здравствуйте, я пытаюсь отправить упорядоченный запрос в родительский сериализатор, попробуйте поле, связанное со slug, но я получаю "Object of type Supplier is not JSON serializable". Я также пытался сделать "serializers.SerializerMethodField()", но я получаю ту же ошибку. Есть ли способ сделать что-то подобное? В моей модели я упорядочиваю ее по имени, поэтому мне нужно сделать другой запрос, чтобы я мог упорядочить ее по последнему посещению. Должен ли я создать новый сериализатор модели, сделать в нем запрос и передать его родительскому сериализатору?

models.py

     last_visited = models.DateTimeField(auto_now_add=True, null=True)

     class Meta:
         ordering = ["name"]

     @property
     def last_4_visited(self):
        return Supplier.objects.order_by('last_visited')[3]

serializer.py

 suppliers = serializers.SlugRelatedField(slug_field='last_4_visited', many=True, read_only=True)
 
  1. Не очень хорошо жестко кодировать количество посещений в свойстве, т.е. сделать метод для абстрактного n, а затем использовать в свойстве.
...
@classmethod
def last_n_visited(cls, n: int):
    return cls.objects.order_by('last_visited')[:n-1]


@property
def last_4_visited(self):
    return type(self).last_n_visited(4)

  1. Чтобы ответить на ваш вопрос.
class SupplierSerializer(serializers.ModelSerializer):
    class Meta:
        model = Supplier
        fields = "__all__"


# and then in your other serializer or even in this one:
class SomeSerilializer(...):
    last_4_visited = serializers.SerializerMethodField(method_name="get_last_4_visited")

    def get_last_4_visited(self, obj):
        suppliers = Supplier.last_n_visited(4)
        return SupplierSerializer(suppliers, many=True).data
Вернуться на верх