Как объявить поле сериализатора, содержащее список идентификаторов, в 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}]>