Объект QuerySet не имеет атрибута phone в Model Serializer django rest - PullRequest
0 голосов
/ 20 марта 2019

Я строю проект с использованием Django rest Api. У меня есть модель с именем DriverProfile, теперь мне нужно добавить файл драйвера, но я получаю сообщение об ошибке ниже:

При попытке получить ошибкузначение для поля phone в сериализаторе DriverProfileCreateSerializer. Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре QuerySet.Исходный текст исключения был: объект 'QuerySet' не имеет атрибута 'phone'

. Я использовал APIView и modelSerializer, и я не знаю, почему это происходит, когда в DriverProfile присутствует поле телефона.Важно, когда я делаю это из общих представлений вместо APIView, это работает, но когда я использую сериализатор модели и представление API, оно выдает ошибки. Я предполагаю, что ошибка в create () в serialzer модели, где я использую driverprofile = DriverProfile.objects.all(), Я не могу отсортировать, пожалуйста, руководство.

Models.py:

class Driver(models.Model):
    User=models.ForeignKey(User,on_delete=models.CASCADE)
    objects = models.Manager()

class DriverProfile(models.Model):
    driver=models.OneToOneField(Driver,on_delete=models.CASCADE)
    drive_name=models.CharField(max_length=20,blank=True)
    phone=models.CharField(max_length=12)
    driver_cnic=models.CharField(max_length=13)

Views.py

class CreateDriverProfile(APIView):

    def get(self,request):
        return Response([DriverProfileCreateSerializer(driver).data for driver in DriverProfile.objects.all()])

    def post(self,request):
        payload=request.data
        serializer=DriverProfileCreateSerializer(data=payload)

        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

Serializer.py:

class DriverProfileCreateSerializer(serializers.ModelSerializer): # create driver profile

    class Meta:
        model=DriverProfile
        fields = '__all__'

    def create(self, validated_data):
        driverprofile = DriverProfile.objects.all()
        return driverprofile

    def update(self, instance, validated_data):
        for k, v in validated_data.items():
            setattr(instance, k, v)
            instance.save()
        return instance

1 Ответ

1 голос
/ 20 марта 2019
  • Измените DriverProfileCreateSerializer следующим образом:
class DriverProfileCreateSerializer(serializers.ModelSerializer): # create driver profile

    class Meta:
        model=DriverProfile
        fields = '__all__'

    def create(self, validated_data):
        driverprofile = DriverProfile.objects.create(**validated_data) # HERE!
        return driverprofile

    def update(self, instance, validated_data):
        for k, v in validated_data.items():
            setattr(instance, k, v)
            instance.save()
        return instance


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...