Django-Rest-FrameWork Post-Foreignkey

Я использую DRF (Django-Rest-Framework) my Models.py

class Followers(models.Model):
    id = models.AutoField(primary_key=True)
    followers_no = models.IntegerField()

    
class Person(models.Model):
    followers = models.ForeignKey(Followers,null=True,blank=True,on_delete=models.CASCADE)
    name = models.CharField(max_length=120)
    age = models.IntegerField()
    
    def __str__(self) -> str:
        return self.name

мой serializers.py

class Personserializer(ModelSerializer):
    followers = FollowerSerializer(read_only=True)
    class Meta:
        model = Person
        fields = "__all__"
    
    def validate(self,data):
        if data['age'] < 18:
            raise serializers.ValidationError('age should be more than 18')
        
        return data

я хочу добавить данные о человеке с помощью поля Followers, для этого я создаю views.py

def get(self, request):
        person_id = request.query_params.get('id')
        try:
            person = Person.objects.get(pk=person_id)
        except Exception as e:
            return Response({"status": False, "message": "Person not found"}, status=status.HTTP_404_NOT_FOUND)
        
        serializer = Personserializer(person)
        return Response({"status": True, "data": serializer.data}, status=status.HTTP_200_OK)
        
    def post(self, request):
        data = request.data
        serializer = Personserializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response({'status': True, "message": "Person created", "data": serializer.data}, status=status.HTTP_201_CREATED)
        return Response({"status": False, "message": "error", "error": serializer.error_messages}, status=status.HTTP_400_BAD_REQUEST)

если я попытаюсь опубликовать данные с помощью postman, как показано ниже

{
        "followers": {
            "id": 1,
            "followers_no": 150
        },
        "name": "hello",
        "age": 19
}

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

i Ожидается, что данные поля последователей будут храниться также

class FollowerSerializer(ModelSerializer):
    class Meta:
        model = Followers
        fields = '__all__'

class Personserializer(ModelSerializer):
    followers = FollowerSerializer()

    class Meta:
        model = Person
        fields = "__all__"
    
    def validate(self,data):
       # remaining code here.....
    
    def create(self, validated_data):
    followers_data = validated_data.pop('followers', None)
    if followers_data:
        followers, created = Followers.objects.get_or_create(**followers_data)
        validated_data['followers'] = followers
    return Person.objects.create(**validated_data)

Followers.objects.get_or_create(**followers_data) В этой строке, если экземпляр Followers с id=1 и followers_no=150 не существует, он будет создан. Если он существует, он будет извлечен и ассоциирован.

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