2017-04-05 1 views
0

Ich habe ein Problem, ich benutze Django Rest Framework und ich muss ein Bild an den Server mit einem Webservice senden, aber ich finde nichts, was ich wirklich brauche, würde ich gerne nur den Speicherort der Datei zu schaffen, und der Service lassen sie es die Arbeit machen hochladen, ist es eine Möglichkeit, ich erreichen kann, dass ?, oFC werde ich nur den Dateipfad auf DB sparenLaden Sie eine Datei in Python/Django

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') 

und ich soll um es während dieses Serialisierer zu tun

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 

jedoch habe ich keine Idee so viel, wie ich es tun kann, die ich zur Verfügung stellen kann Der vollständige Pfad zum Speicherort der Datei, aber keine Ahnung, wie Sie ihn übermitteln können.

+0

gefunden, wo Sie hochladen das Bild zu? – FuzzyAmi

+0

Bitte fügen Sie etwas mehr von Ihrem Code hinzu und beschreiben Sie das aufgetretene Problem besser, damit wir uns genau anschauen können, was Ihr tatsächliches Problem ist. Im Moment zeigen Sie nur eine Klassendeklaration, die nicht zu zeigen scheint, was falsch ist. –

+0

@FuzzyAmi in ein Verzeichnis auf dem Server: / –

Antwort

0

Am Ende fand ich eine saubere Lösung für das Modell wie diese

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') 

ist

es schwer war, zu dieser Lösung zu bekommen, aber scheinbar nur so, wie ich für mich