Использование queryset внутри Primarykeyfield ModelSerializer в Django Rest

Я делаю простой create api для модели, у которой почти все поля являются внешними ключами для других моделей. Я пишу логику создания внутри сериализатора. Она работает нормально. Однако если я определяю все поля как pkrelated field в сериализаторе, он запрашивает атрибут queryset. Почему он это спрашивает. А если я поставлю queryset и импортирую все объекты (queryset= Example.objects.all()), не будет ли это делать код и api медленным, так как он импортирует все объекты из модели Example. И еще, в чем его польза?

Моя модель:

class Example(TimeStampAbstractModel):
    abc = models.ForeignKey(User,....                                   
    xyz_info = models.ForeignKey(XYZ,...                                
    mnp = models.ForeignKey(MNP,......                                   
    status = models.CharField(....blank=True)

Мой сериализатор:

class AttendanceSerializer(serializers.ModelSerializer):
    xyz_info = serializers.PrimaryKeyRelatedField(required=True,
                                                      queryset=XYZ.objects.all())
    mnp= serializers.PrimaryKeyRelatedField(required=True,
                                                 queryset=MNP.objects.all())

    #mnp = serializers.IntegerField(required=True)
    status = serializers.CharField(required=True)


    class Meta:
        model = Attendance
        fields = ['xyz_info','mnp','status']

    def create(self, validated_data):
    .............

В приведенном выше классе сериализатора, если я не определил все эти файлы в сериализаторе, он работает нормально. Но если я определяю их как pkfield, как указано выше (я передаю только id в теле из frontend), он запрашивает queryset. Почему он запрашивает queryset и каково его использование? Также могу ли я определить их как integarfield? Когда определять как pkfield, а когда как integarfield?

Вернуться на верх