Как объявить поле сериализатора, содержащее список идентификаторов, в django

Модели:

class Author(Base):
    name = models.CharField(max_length=100, unique=True)

class Book(Base):
    name = models.CharField(max_length=100, unique=True)

class AuthorBookAssn(Base):
    author = models.ForeignKey(Author, on_delete=models.PROTECT)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)

У меня есть api для создания книги, и вместе с данными книги мы также получаем список идентификаторов авторов, как должно быть создано поле сериализатора, чтобы это был список идентификаторов.

например: [1, 2, 3]

Это поле не будет присутствовать ни в одной модели, нам нужно использовать эти поля только для создания записей в таблице AuthorBookAssn.

Вы можете создать ModelSerializer, который сериализует один объект модели

class AuthorBookAssnSerializer(serializers.ModelSerializer):
    class Meta:
        model = AuthorBookAssn
        fields = ['id']

и затем, когда вы пытаетесь проверить список данных, таких как [1, 2, 3], вы можете сделать следующее

ids = [1,2,3]
AuthorBookAssns = AuthorBookAssnSerializer(ids, many=True)
AuthorBookAssns.data

Как объявить поле сериализатора, содержащее список идентификаторов в django убедитесь, что вы хорошо отступили от кода, функция должна быть в классе также при использовании SerializerMethodeField функция должна начинаться с get_. в данном случае имя функции должно срабатывать get_list_ids

class ProfileSerializers(serializers.ModelSerializer):
   list_ids = serializers.SerializerMethodField(read_only=True) 
   anyfield = serializers.CharField(source="")
   class Meta:
       model = Profile
       fields = (
           "list_ids",
           "anyfield ",
          
         )
   def get_list_ids (self, obj):
     my_ids = ModelName.objects.values_list('id', flat=True)
     return myids # this will return list of ids like <QuerySet [1, 2]>
# if you want to return list of tuples of ids use values_list: <QuerySet [(1,), 
 # (2,)]>
# if you want to return list of Dict user values <QuerySet [{'id': 1}, 
 # {'id': 2}]>
Вернуться на верх