React/Django - ImageField (при отсутствии кодировки какого-либо файла) - Отправленные данные не были файлом. Проверьте тип кодировки на форме
Я хочу не загружать никакое изображение при отправке, но оно выдает ошибку
The submitted data was not a file. Check the encoding type on the form.
Когда я выбираю файл, он работает нормально.
Как это можно исправить, я также пробовал некоторые методы. Я пытаюсь удалить изображение, когда оно становится null, и установить значение по умолчанию в models
views.py
class ProductViewset(ModelViewSet):
serializer_class = ProductSerializer
queryset = Product.objects.all()
def create(self, request, *args, **kwargs):
data = format_product_data(request.data.copy())
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
pprint(serializer.validated_data)
headers = self.get_success_headers(serializer.data)
return Response(format_product_response_data(serializer.data), status=201, headers=headers)
serializer.py
class ProductSerializer(ModelSerializer):
image = serializers.ImageField(max_length=None, use_url=True, allow_empty_file=True)
attrs = ProductAttrSerializer(many=True, required=False, read_only=False)
type = serializers.PrimaryKeyRelatedField(read_only=False, required=True, allow_null=False, allow_empty=False, queryset=ProductType.objects.all())
class Meta:
fields = "__all__"
model = Product
def create(self, validated_data):
attr_list: List[dict] = []
if 'attrs' in validated_data:
attrs = validated_data['attrs']
del validated_data['attrs']
for attr in attrs:
attr_serializer = ProductAttrSerializer(data=attr)
attr_serializer.is_valid(raise_exception=True)
attr_list.append(attr_serializer.save())
instance = Product.objects.create(**validated_data)
instance.attrs.set(attr_list)
instance.save()
return instance
models.py
class Product(models.Model):
number = models.CharField(max_length=20, null=True, unique=True, blank=True, db_column='NO.')
name = models.CharField(max_length=30, null=True, unique=False, db_column='Name')
image = models.ImageField(upload_to="product_images", blank=True, null=True, db_column='Image')
entry_date = models.DateTimeField(auto_now_add=True, db_column='Date', null=True, blank=True)
last_updated = models.DateTimeField(auto_now=True, db_column='Update_date')
source_type = models.CharField(max_length=10, blank=False, choices=PRODUCT_TYPES, default="spd")
type = models.ForeignKey(to=ProductType, on_delete=models.CASCADE, related_name="products", related_query_name="product")
status = models.CharField(max_length=8, null=False, blank=False, choices=PRODUCT_STATUS_CHOICES, default='act')
reference = models.CharField(null=True, blank=True, max_length=50, default=None)
qty = models.IntegerField(null=True, blank=True)
customer = models.ForeignKey(null=True, blank=True, to="customer.Customer", related_name="products", related_query_name="product", on_delete=models.SET_NULL)
class Meta:
db_table = "Product"
def __str__(self):
return f"Product :{self.name}" ```