簡體   English   中英

在python / Django中上傳文件

[英]Upload a file in python/Django

我有一個問題,我正在使用django rest框架,我需要使用網絡服務將圖像提交到服務器,但是我找不到真正需要的東西,我只想提供文件的位置並讓服務完成上傳工作,有沒有辦法實現?,ofc我只會將文件路徑保存在數據庫中

class AdvertisementData(EmbeddedDocument):
 id = ObjectIdField(null=False, primary_key=True)
 brand = StringField(max_length=200, required=False)
 name = StringField(max_length=200, required=False)
 description = StringField(max_length=200, required=False)
 image = StringField(required=False)//HERE THE FILEPATH
 active = BooleanField(required=True)
 target = EmbeddedDocumentField('TargetData')

我應該在這個序列化器期間做

class AdvertisementDataCreateSerializer(DocumentSerializer):
brand = serializers.CharField(required=True)
name = serializers.CharField(required=True)
description = serializers.CharField(required=True)
image = serializers.CharField(required=True)
active = serializers.BooleanField(required=True)
target = TargetDataSerializer(required=True)


class Meta:
    model = AdvertisementData
    fields = ('brand', 'name','description','image','active','target')
def create(self,validated_data,**kwargs):
    vendor_id = VendorData.objects.get(vendorAuth__idp=self.context['request'].user.id)
    print(vendor_id.id)
    advertisement = AdvertisementData(id=ObjectId(), brand=self.data.get('brand'), name=self.data.get('name'),
              description=self.data.get('description'),image=self.data.get('image'), active=self.data.get('active'))
    targetaux = self.data.get('target')     
    target = TargetData(id=ObjectId(),minAge=targetaux['minAge'],maxAge=targetaux['maxAge'],gender=targetaux['gender'])
    advertisement.target = target
    vendor_id.advertisements.append(advertisement)
    vendor_id.save()
    #advertisement =  [x for x in vendor_id.advertisements if x.id == ObjectId((advertisement.id))]

    vendor_id.save()
    return advertisement

但是我不知道該怎么做,我能夠提供文件位置的完整路徑,但不知道如何提交。

最后,我發現模型的整潔解決方案是這樣的

class AdvertisementData(EmbeddedDocument):
id = ObjectIdField(null=False, primary_key=True)
brand = StringField(max_length=200, required=False)
name = StringField(max_length=200, required=False)
description = StringField(max_length=200, required=False)
image = ImageField(required=False)
active = BooleanField(required=True)
target = EmbeddedDocumentField('TargetData')


class AdvertisementDataCreateValidatorSerializer(DocumentSerializer):
brand = serializers.CharField(required=True)
name = serializers.CharField(required=True)
description = serializers.CharField(required=True)
image = serializers.CharField(required=True)
active = serializers.BooleanField(required=True)
target = TargetDataSerializer
#C:\Users\GrupoBECM09\Pictures\Test

class Meta:
    model = AdvertisementData
    fields = ('brand', 'name','description','image','active','target')

很難找到這種解決方案,但顯然只有我為我找到的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM