Проблема с функцией 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']