django - Django Rest 多张图片上传到 React-Native
问题描述
已经三天了,我无法上传图片。查看了互联网上所有可能的帖子,但找不到解决方案。如果有人帮助我,我将不胜感激。我真的被困住了。
我在下面的多对多关系字段中遇到错误,并且无法上传任何图像。
KeyError:“兴奋剂”和“照片”
这是我的模型
def upload_location(instance, filename):
return '/images/%s-%s' % (str(datetime.now()),instance.file)
class Picture(models.Model):
file = models.ImageField(upload_to=upload_location)
slug = models.SlugField(max_length=50, blank=True)
def __str__(self):
return self.file.name
def save(self, *args, **kwargs):
self.slug = self.file.name
super(Picture, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
self.file.delete(True)
super(Picture, self).delete(*args, **kwargs)
class Dopings(models.Model):
name = models.CharField(verbose_name="Doping Name",max_length=225)
def __str__(self):
return self.name
class ListingDopings(models.Model):
doping = models.ForeignKey(Dopings,on_delete=models.SET_NULL, verbose_name="Doping", null=True, blank=True)
expire_date = models.DateField()
class Listings(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='listing_user', null=True, blank=True)
categoryName = models.ForeignKey(GameCategories,on_delete=models.SET_NULL, verbose_name="Category Name", null=True, blank=True)
currency = models.ForeignKey(Currency,on_delete=models.SET_NULL, verbose_name="Currency", null=True, blank=True)
price = models.IntegerField(default=0)
date = models.DateField(auto_now=True)
title = models.CharField(verbose_name="Title",max_length=225, null=True,blank=True)
description = models.TextField(null=True,blank=True)
slug = models.SlugField(max_length=555, blank=True)
photos = models.ManyToManyField(Picture,blank=True)
isActive = models.BooleanField(default=False)
dopings = models.ManyToManyField(ListingDopings, blank=True)
def __str__(self):
return self.title
我的序列化器
class ListingSerializer(serializers.ModelSerializer):
photos = PictureSerializer(many=True, required=False, allow_null=True)
dopings = DopingSerializer(many=True, required=False, allow_null=True)
class Meta:
model = Listings
fields = (
'id', 'categoryName', 'currency', 'price', 'date', 'title', 'description', 'slug', 'photos', 'isActive',
'dopings')
def create(self, validated_data):
print('Data', validated_data)
dopings_data = validated_data.pop('dopings')
photo_data = validated_data.pop('photos')
instance = Listings.objects.create(**validated_data)
for photo in photo_data:
picturesObject = Picture.objects.create(listings=instance, **photo)
instance.photos.add(picturesObject)
for doping in dopings_data:
dopingObject = Dopings.objects.create(listings=instance, **doping)
instance.dopings.add(dopingObject)
return instance
我的观点
class ListingsCreateApiView(mixins.CreateModelMixin,generics.ListAPIView):
serializer_class = ListingSerializer
authentication_classes = [TokenAuthentication]
parser_classes = (MultiPartParser, FormParser,FileUploadParser)
def get_queryset(self):
qs = Listings.objects.all().filter(isActive=True)
return qs
def post(self,request,*args,**kwargs):
return self.create(request,*args,**kwargs)
def perform_create(self,serializer):
my_token = self.request.META.get('HTTP_AUTHORIZATION').split()[1]
user_id = Token.objects.get(key=my_token).user_id
userObject = get_object_or_404(User, id=user_id)
serializer.save(user=userObject)
和我的 React-native 上传
const createFormData = (photo, body) => {
const data = new FormData();
data.append("photos", {
uri : photo.path,
name: photo.name,
type: photo.mime,
});
Object.keys(body).forEach(key => {
data.append(key, body[key]);
});
return data;
};
const uploadImage = async (imagePath) => {
const res = await uploadPhotos({
method: 'POST',
body: createFormData(imagePath, { "title":title ,"categoryName":gameId,"currency":currencyId,price:price,description:details,"isActive":0, "dopings" : {id:1} })
}, ADD_LISTING);
};
解决方案
您不能使用 django-rest-framework 发送图像,我建议只发送保存图像的存储链接,例如 firebase。例如,您只将图像 url 发送到 django。
推荐阅读
- typescript - 实施依赖注入后我的下一步应该是什么?
- python - 确定 Keras 模型的输入形状
- mysql - Mysql安装配置在“启动服务器”时停止
- java - NoSuchBeanDefinitionException:没有名为“authService”的 bean 可用
- c# - 从 SourceTree 签出 git 分支后,在项目(解决方案中的多个项目)上加载失败错误
- ios - XCode 11.5 升级后 React-Native Image 不显示
- python - 如何提高 LSTM 模型的预测和准确性?
- javascript - 我通过函数 $.ajax() 从 javasript 发送到我的 http 控制器函数的 json 字符串为空
- python-3.x - Flask-migrate 未检测到架构更改
- google-apps-script - 如何自动从查看模式切换到编辑模式,反之亦然