Проблема с функцией create в django при использовании rest framework

Я разработчик Flask, использующий Django для проекта, над которым я работаю... Я использую rest framework в django, потому что я использую firebase для auth и нашел несколько хороших советов о том, как включить его, используя rest framework

Проблема в том, что когда я пытаюсь создать поставщика для пользователя, вы можете увидеть ответ об ошибке от Postman ниже...

Запрос на: http://localhost:8000/pm/createsupplier/3/

Тело запроса:

{
    "supplier": {"name": "Donald Duck", "phone": 111, "email": "donald@yahoo.com"}
}

Ответ на запрос:

  {
        "email": "kbess86@gmail.com"
  }

Поставщик не создан

models.py:

class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    bio = models.CharField(max_length=200)
    email = models.CharField(max_length=200)

class Supplier(models.Model):
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    phone = models.IntegerField()
    email = models.EmailField()

views.py:

class createsuppliers(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    serializer_class = CreateSupplierSerializer
    lookup_field = 'user'

serializers.py:

class CreateSupplierSerializer(serializers.ModelSerializer):
    name = serializers.CharField(required=False, allow_blank=True, max_length=100)
    email = serializers.CharField(required=False, allow_blank=True, max_length=100)
    phone = serializers.IntegerField(required=False)

    def create(self, instance, validated_data):
        supplier_data = validated_data.pop('supplier')
        supplier = Supplier.objects.create(user=instance, **supplier_data)

        return supplier
    class Meta:
        model=Supplier
        fields=['name','email','phone']

Решение...

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    bio = models.CharField(max_length=200)
    email = models.CharField(max_length=200)

class Supplier(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    phone = models.IntegerField()
    email = models.EmailField(max_length=200)

views.py...

class createsuppliers(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    serializer_class = CreateSupplierSerializer
    lookup_field = 'user'

serializers.py...

class CreateSupplierSerializer(serializers.ModelSerializer):
    name = serializers.CharField(max_length=200)
    email = serializers.EmailField(max_length=200)
    phone = serializers.IntegerField()

    def update(self, instance, validated_data):
        if str(self.context['request'].user) != str(instance.user.username):
            raise exceptions.PermissionDenied('You do not have permission to update')
            
        supplier = Supplier.objects.create(user=instance, **validated_data)

        return supplier
    class Meta:
        model=Supplier
        fields=['name','email','phone']
Вернуться на верх